AspNet Core

介绍

本文档描述了ASP.NET Boilerplate的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(); 
        
        //...
    }
}

模块配置

您可以使用  启动配置  通过在模块 的PreInitialize方法中使用Configuration.Modules.AbpAspNetCore()来配置AspNetCore 模块。

控制器

控制器可以是ASP.NET Core中的任何类型的类,并且不限于从Controller类派生的类。默认情况下,如果一个类以Controller结尾(如ProductController),则它被视为MVC控制器。您还可以将MVC的[Controller]属性添加到任何类以使其成为控制器。这是ASP.NET Core MVC处理事物的方式。有关 详细信息,请参阅ASP.NET Core  文档

如果您最终使用Web层类(如HttpContext)或返回视图,最好从AbpController继承,该派生自MVC的Controller类。如果要创建仅适用于对象的API控制器,请考虑创建POCO控制器类,或者将应用程序服务用作控制器,如下所述。

应用程序服务作为控制器

ASP.NET Boilerplate提供了创建应用程序服务的基础结构  如果要将应用程序服务作为控制器公开给远程客户端(如先前使用动态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(这是默认值),则服务方法的HTTP谓词由以下命名约定确定:

您可以使用任何ASP.NET Core属性来更改操作的HTTP方法或路由。这需要您添加对Microsoft.AspNetCore.Mvc.Core包的引用。

注意:以前,动态Web api系统要求您为应用程序服务创建服务接口。ASP.NET Core集成不需要这样做。即使您有接口,也应将MVC属性添加到服务类中。

过滤器

ABP为ASP.NET Core定义了一些预构建的过滤器。默认情况下,所有这些操作都会添加到所有控制器的所有操作中

授权过滤器

AbpAuthorizationFilter用于集成  授权系统  和  功能系统

审核操作筛选器

AbpAuditActionFilter用于与审计日志记录系统集成  如果未禁用审核,则默认情况下会将所有请求记录到所有操作。您可以使用操作和控制器上的Audited和DisableAuditingattributes来控制审核日志记录。

验证操作筛选器

AbpValidationActionFilter用于与Model.IsValid属性集成,  如果操作输入值无效,则抛出验证异常。

您可以使用操作和控制器上的EnableValidation和DisableValidation属性来控制验证。

工作单元行动过滤器

AbpUowActionFilter与工作单元  系统集成  它在操作执行之前自动开始一个新的工作单元,如果没有抛出异常,则在执行操作后完成工作单元。

您可以使用UnitOfWork属性来控制操作的UOW行为。您还可以使用启动配置更改所有操作的默认工作单元属性。

异常过滤器

AbpExceptionFilter用于处理从控制器操作引发的异常。它处理并记录异常并将包装的响应返回给客户端。

结果过滤器

如果操作成功执行,AbpResultFilter主要用于包装结果操作。

结果缓存Ajax请求

AbpResultFilter为AJAX请求的响应添加了一个Cache-Control标头(no-cache,no-store ...)。因此,即使对于GET请求,它也可以防止AJAX响应的浏览器缓存。可以通过配置或属性禁用此行为。您可以使用NoClientCache属性来阻止缓存(默认)或AllowClientCache attrbiute以允许浏览器缓存结果。或者,您可以实现IClientCacheAttribute来创建自定义属性以实现更精细的控制。

模型粘合剂

AbpDateTimeModelBinder用于使用Clock.Normalize方法规范化DateTime(和Nullable <DateTime>)输入。

查看

MVC视图可以从AbpRazorPage继承,以自动注入最常用的基础结构(LocalizationManager,PermissionChecker,SettingManager等)。它还有快捷方法,如L(...)用于本地化文本。启动模板默认继承此项。

您可以从AbpViewComponent而不是ViewComponent继承Web组件,以利用它的基本属性和方法。

客户端代理

ABP可以自动为所有MVC控制器(不仅是应用程序服务)创建JavaScript代理。 默认情况下,它是作为控制器创建的  Application Services(请参阅上面的部分)。您可以将[RemoteService]属性添加到任何MVC控制器以为其创建客户端代理。JavaScript代理是在运行时动态生成的。您需要向页面添加给定的脚本定义:

<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类  它使集成测试更加容易。

首先,调查启动模板中的集成测试,看它是否正常运行。

nidie.com.cn - 用心与你沟通