zoukankan      html  css  js  c++  java
  • ABP官方文档翻译 6.2.1 ASP.NET Core集成

    ASP.NET Core

    介绍

      本文档描述了ABP如何集成ASP.NET Core。ASP.NET Core通过Abp.AspNetCore nuget包实现集成。

    迁移到ASP.NET Core?

       如果你已经有一个工程并考虑迁移到ASP.NET Core,你可以阅读我们博客的帖子来了解我们迁移的经验。

    启动模板

      你可以在启动模板创建一个工程,这是一个简单、空的web工程但是已经和ABP框架集成并进行了适当的配置。

    配置

    启动类

    为了使ABP集成到ASP.NET Core,我们需要在Startup类里做一些更改,如下所示:

    public class Startup
    {
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            //...
    
            //Configure Abp and Dependency Injection. Should be called last.
            return services.AddAbp<MyProjectWebModule>(options =>
            {
                //Configure Log4Net logging (optional)
                options.IocManager.IocContainer.AddFacility<LoggingFacility>(
                    f => f.UseLog4Net().WithConfig("log4net.config")
                );
            });
        }
    
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            //Initializes ABP framework and all modules. Should be called first.
            app.UseAbp(); 
            
            //...
        }
    }

    模块配置

      你可以使用启动配置来配置AspNet Core模块(在模块的PreInitialize方法中使用Configuration.Modules.AbpAspNetCore())。

    控制器

      在ASP.NET Core中控制器可以是任何类型的类。它不仅限制于继承自Controller的类。一个类以Controller(如ProductController)结尾就默认为MVC控制器。你也可以给任何类添加MVC的[Controller]特性使其成为一个控制器。这就是ASP.NET Core MVC工作的方式。参见ASP.NET Core文档了解更多。

      如果你使用web层的类(如HttpContext)或返回一个视图,最好继承AbpController(它从MVC的Controller继承)类。但是,如果你创建的API控制器仅仅使用对象,可以考虑创建一个POCO控制器类或者你可以按如下所描述的那样使用应用服务作为控制器。

    应用服务作为控制器

      ABP提供了基础设施来创建应用服务。如果你想将应用服务作为控制器提供给远程客户端(可以像之前一样使用dynamic web api),你可以在模块的PreInitialize方法中通过一个简单配置来实现。示例:

    Configuration.Modules.AbpAspNetCore().CreateControllersForAppServices(typeof(MyApplicationModule).Assembly, moduleName: 'app', useConventionalHttpVerbs: true);

      CreateControllersForAppServices 方法接收一个程序集,把程序集里所有的应用服务转换为MVC控制器。你可以使用RemoteService特性在方法或类级别来启用/禁用它。

      当一个应用服务转换为MVC控制器,默认路由为/api/services/<module-name>/<service-name>/<method-name>。例如:如果ProductAppService定义了一个Create方法,它的URL将为/api/services/app/product/create(假定模块的名字为'app')。

      如果useConventionalHttpVerbs设置为true(默认值为true),那么服务方法的HTTP动词由命名约定来决定:

    • Get:方法名以'Get'开始时使用。
    • Put:方法名以'Put'或'Update'开始时使用。
    • Delete:方法名以'Delete'或'Remove'开始时使用。
    • Post:方法名以'Post','Create'或'Insert'开始时使用。
    • Patch:方法名以'Patch'开始时使用。
    • 否则,Post默认使用的HTTP动词。

      你可以使用任何ASP.NET Core特性来改变HTTP方法或actions的路由(但是当然这需要添加相关ASP.NET Core包的引用)。 

      注意:之前,在给应用服务创建服务接口时需要动态wei api系统,但是对于ASP.NET Core集成不需要。同样,MVC特性应该添加到服务类,即使已经有接口。 

    过滤器

      ABP为AspNet Core 定义了一些內建过滤器。默认所有的过滤器会添加到所有控制器的所有actions。

    授权过滤器

      AbpAuthorizationFilter用来集成授权系统和特征系统。

    • 你可以为actions或controllers定义AbpMvcAuthorize特性来在执行前检查需求的权限。
    • 你可以为actions或controllers定义RequiresFeature特性来在执行前检查需求的特征。
    • 你可以为actions或controllers定义AllowAnonymous(或在应用层定义AbpAllowAnoymous)特性来禁止校验和授权。

    审计Action过滤器

      AbpAuditActionFilter用来集成审计日志系统。它默认为所有的actions记录所有的请求(如果审计没有禁用)。你可以为actions和controllers使用AuditedDisableAuditing特性来控制审计日志。

    校验过滤器

      AbpValidationActionFilter用来集成校验系统并自动为所有的actions校验输入。另外ABP內建校验和标准化,它检查MVC的Model.IsValid属性并抛出校验异常,如果action的输入有任何无效值。

      你可以为actions和controllers使用EnableValidationDisableValidation特性来控制校验。

    工作单元Action过滤器

      AbpUowActionFilter用来集成工作单元系统。它在action执行前自动开始一个新的工作单元并在action结束后完成工作单元(如果没有异常抛出)。

      你可以使用UnitOfWork特性来控制action的UOW行为。你也可以使用启动配置来更改所有action的默认工作单元特性。

    异常过滤器

      AbpExceptionFilter用来从controller actions中处理异常抛出。它处理并记录异常,然后返回包装的响应到客户端:

    • 它仅处理对象结果,不处理视图结果。所以,actions返回任何对象、JsonResult或者ObjectResult都会被处理。Action返回一个视图或任何其他实现了IActionsResult的结果类型不会被处理。建议使用在Microsoft.AspNetCore.Diagonistics包中內建的UseExceptionHandler扩展方法来处理视图异常。
    • 异常处理和日志行为可以为方法或类使用WrapResult和DontWrapResult特性来改变。

    结果过滤器

      AbpResultFilter主要用来包装结果action,如果action执行成功的话。

    • 它仅包装JsonResult、OjectResult和任何没有实现IActionResult(还有相应的异步版本)的对象。如果你的action返回一个视图或任何其他类型的结果,都不会被包装。
    • WrapResultDontWrapResult特性可以用于方法和类来启用/禁用包装。
    • 你可以使用启动配置来更改结果包装的默认行为

    Ajax请求的结果缓存

      AbpResultFilter为AJAX请求的响应添加了Cache-Control头(no-cache,no-store)。因此,它阻止浏览器缓存AJAX响应甚至GET请求的响应。可以使用配置来禁用此功能。

    模型绑定器

      AbpDateTimeModelBinder用来标准化DateTime(和Nullable<DateTime>)输入,使用Clock.Normalize方法。

    视图

      MVC视图可以继承自AbpRazorPage来自动注入大多数使用的基础设施(LocalizationManager、PermissionChecker、SettingManager...etc)。它也有快捷方法(如L(...)来本地化文本)。启动模板默认继承它。

      你可以使你的web组件继承自AbpViewComponet而不是ViewComponent来使用基础属性和方法的优势。

    客户端代理

      ABP可以自动为所有的MVC控制器(不仅仅是应用服务)创建javascript代理。它默认创建应用服务作为控制器(参见上面部分)。你可以为任何MVC控制器添加[RemoteService]特性来为它创建客户端代理。Javascript代理在运行时动态生成。你需要在page中添加指定的script定义:

    <script src="~/AbpServiceProxies/GetAll?type=jquery" type="text/javascript"></script>

      当前,只有JQuery代理生成。然后我们可以使用javascript来调用一个MVC方法,如下所示:

    abp.services.app.product.create({
        name: 'My test product',
        price: 99
    }).done(function(result){
        //...
    });

    集成测试

      对于ASP.NET Core而言,集成测试相当容易,它自己的网站上有详细的文档。ABP跟随这个导向并在Abp.AspNetCore.TestBase包中提供了AbpAspNetCoreIntegratedTestBase类。它使得集成测试更加简单。

      最好在启动模板里探究集成测试。

    返回主目录

  • 相关阅读:
    我来了
    性能分析:处理器、磁盘I/O、进程、网络分析方法 http://www.cnblogs.com/fnng/archive/2012/10/30/2747246.html
    jvisualvm监控服务器状态
    linux下常用监控命令
    app 常见网络性能
    native app ->hybrid app->web app的发展
    JMeter远程启动客户端总是不通的原因
    java机制
    webbench,linux下并发测试工具
    操作数数据类型 ntext 对于 max 运算符无效
  • 原文地址:https://www.cnblogs.com/xajh/p/7062286.html
Copyright © 2011-2022 走看看