AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别

1.services.AddMvcCore()

只注册运行 Controller/Razor Pages 必要的核心服务,确保 Pipeline 程序可动作,其馀如像 Data Annotation Model Validation、身分验证等服务要自己加挂,除有特殊客制需求,一般不太常用。

2.services.AddControllers()

包含 AddMvcCore() 所做的动作外,再加上:

  1. 身分验证服务
  2. Swagger/Open API 等 API 文件动态产生功能
  3. Data Annotation - 支援 Attribute 资料检核及 IValidateObject
  4. Formatter Mapping - 依 Request 需求提供不同格式(JSON/XML)内容
  5. CORS - 支援跨网域整合

要用 Controller 但不会用到 View,例如纯 WebAPI,可以选这个。

3.services.AddRazorPages()

包含 AddMvcCore() 所有功能,再加上:

  1. Razor Pages 功能
  2. 身分验证服务
  3. Data Annotation - 支援 Attribute 资料检核及 IValidateObject
  4. Cache Tag Helper

4.services.AddControllersWithViews()

包含 AddControllers() 的所有项目,再加上:

  1. cshtml Razor View
  2. Cache Tag Helper

要使用标准 Model + View + Controller 架构,通常就选这个。

5.services.AddMvc()

等于 AddControllersWithViews()AddRazorPages(),不想漏掉功能发挥 ASP.NET Core 最大威力,选这个就对了。


AddMvc/AddMvcCore/AddControllers等区别

比较一下AddMvc、AddMvcCore、AddController等在服务配置时的区别及各自拥有的功能。

1.services.AddMvcCore()

只注册路由请求和执行控制器所必要的核心服务,确保 Pipeline 程序可运转。除非是有能力并想完全去自主DIY,一般不建议直接使用这个。

2.services.AddControllers()

除包含了 AddMvcCore() 所有功能,再加上:

  • Authorization
  • ApiExplorer
  • Data Annotation
  • Formatter Mapping
  • CORS

要用 Controller 但不用View,新建WebAPI时,默认采用的就是这个,使用这个时,与SwashBuckle配合时,无需再额外引入ApiExplorer,自身已经依赖。

3.services.AddRazorPages()

包含 AddMvcCore() 所有功能,再加上:

  • Razor Pages
  • Authorization
  • Data Annotation
  • Cache Tag Helper

4.services.AddControllersWithViews()

包含 AddControllers() 所有功能,再加上:

  • cshtml和Razor View
  • Cache Tag Helper

标准MVC模式,常用Razor视图,使用这个就够了

5.services.AddMvc()

包含 AddControllersWithViews()AddRazorPages() 功能。 包含的功能最为齐全,如果不想遗漏功能,直接使用这个就行
在这里插入图片描述


AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages

在这里插入图片描述


AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages

在本文中,我将讨论 ASP.NET Core 应用程序中的 AddController()、AddMvc()、AddControllersWithViews()AddRazorPages() 方法。 我们还将讨论何时使用 ASP.NET Core 中的哪些方法。

ASP.NET Core 中可用的不同方法:
如果转到 AddMvc() 扩展方法的定义,除了 AddMvc() 方法外,还有其他方法(AddController()、AddControllersWithViews()AddRazorPages())可用,如下图所示。 所有这些方法都作为 IServiceCollection 接口上的扩展方法实现。
AddController vs AddMvc vs AddControllersWithViews vs AddRazorPages
让我们一一详细讨论所有这些方法是什么以及它们提供了哪些功能。

要记住的要点:

  1. 所有方法都支持控制器。因此,如果您只需要一个控制器,那么您可以使用任何一种方法。
  2. 模型绑定功能也可用于所有方法。模型绑定用于将传入数据映射到控制器操作方法。
  3. 除了 AddRazorPages 方法之外,所有其他方法都支持 API Explorer 功能。 API Explorer使用了应用程序中所有可用 API 的列表。
  4. 授权可用于所有四种方法。授权主要用于提供安全功能,
  5. 同样,除了 AddRazorPages 方法之外,所有其他方法都支持 CORSCORS基本上是一个允许跨域调用的功能。这意味着他们可以从其他域使用 jQuery AJAX 访问您的方法。
  6. 所有方法都支持验证功能。验证主要用于验证 HTTP 请求数据。在 .NET Core应用程序中,我们可以使用称为数据注释的概念来实现验证。
  7. 除了 AddRazorPages 方法外,所有其他方法都支持格式化程序映射功能。 Formatter Mapping功能基本上用于格式化您的操作方法的输出,例如 JSON 或 XML 等。
  8. Antiforgery、TempDataViews 功能在 AddControllers 方法中不可用。
  9. 页面仅适用于 AddMVCAddRazorPages 方法。
  10. TagHelpersAddControllers 方法中不可用,可用于其余三种方法。
  11. 内存缓存功能在 AddControllers 方法中也不可用,但在其余三个方法中可用。

我们的应用程序使用哪种方法?

这取决于您要创建的应用程序类型。

  1. 如果要创建没有视图的 Web API 应用程序,则需要使用 AddControllers() 扩展方法。
  2. 如果要使用 Razor Page 应用程序,则需要在 Startup 类的 ConfigureService 方法中使用AddRazorPages() 扩展方法。
  3. 如果你想开发一个模型视图控制器,即 MVC 应用程序,那么你需要使用 AddControllersWithViews() 方法。此外,如果您希望 Pages 功能进入您的 MVC 应用程序,那么您需要使用 AddMVC 方法。

AddMvc:此方法具有所有功能。 因此,您可以使用此 AddMVC 方法来处理任何类型的应用程序(Web API、MVC 和 Razor Pages)。

注意:添加 AddMvc() 方法将添加额外的功能,即使您的应用程序不需要这些功能可能会影响应用程序的性能。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 .NET Core 中实现动态 API 的方式有很多种,以下是其中的一种实现方式: 1. 定义一个基础控制器类,用于处理动态 API 请求: ```csharp [Route("api/[controller]")] [ApiController] public class DynamicApiController : ControllerBase { [HttpGet("{dynamicPath}")] public IActionResult Get(string dynamicPath) { // 处理动态 API 请求 // 根据 dynamicPath 参数来决定具体的处理逻辑 return Ok(); } [HttpPost("{dynamicPath}")] public IActionResult Post(string dynamicPath, [FromBody] object data) { // 处理动态 API 请求 // 根据 dynamicPath 参数和 data 参数来决定具体的处理逻辑 return Ok(); } // 可以加入其他的 HTTP 方法,以支持更多的动态 API 请求 } ``` 2. 在 Startup.cs 中注册动态 API 路由: ```csharp public void ConfigureServices(IServiceCollection services) { // 注册 MVC 框架 services.AddMvc(); // 注册动态 API 路由 services.AddMvcCore().AddApiExplorer().AddControllersAsServices(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 添加动态 API 路由 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}" ); routes.MapRoute( name: "api", template: "api/{*dynamicPath}", defaults: new { controller = "DynamicApi", action = "Get" } ); }); } ``` 3. 在控制器中处理动态 API 请求: ```csharp public class DynamicApiController : Controller { public IActionResult Get(string dynamicPath) { // 处理 GET 请求 // 根据 dynamicPath 参数来决定具体的处理逻辑 return Ok(); } public IActionResult Post(string dynamicPath, [FromBody] object data) { // 处理 POST 请求 // 根据 dynamicPath 参数和 data 参数来决定具体的处理逻辑 return Ok(); } // 可以加入其他的 HTTP 方法,以支持更多的动态 API 请求 } ``` 以上是一种简单的实现动态 API 的方式,具体实现还需要根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值