找回密码
 会员注册
查看: 133|回复: 0

干货:详解asp.net Core3.0区域与路由配置的方法

[复制链接]

250

主题

1

回帖

819

积分

管理员

积分
819
发表于 2024-2-29 08:10:47 | 显示全部楼层 |阅读模式

在ASP.NET Core 3.0中路由配置和2.0不一样了

一、MVC 服务注册

ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureServices。

三个新的顶级扩展方法与 MVC 方案上IServiceCollection可用。 模板使用这些新方法,而不是UseMvc。 但是,AddMvc继续像它已在以前的版本。

下面的示例将添加对控制器和与 API 相关的功能,但不是视图或页面的支持。 API 模板使用此代码:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers();
  4. }
复制代码

下面的示例将添加对控制器、 与 API 相关的功能,和视图,但不是页面的支持。 Web 应用程序 (MVC) 模板使用此代码:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllersWithViews();
  4. }
复制代码

下面的示例添加支持 Razor 页面和最小控制器支持。 Web 应用程序模板使用此代码:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddRazorPages();
  4. }
复制代码

此外可以组合的新方法。 下面的示例是等效于调用AddMvcASP.NET Core 2.2 中:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers();
  4. services.AddRazorPages();
  5. }
复制代码

二、Startup.Configure配置
一般不建议:
添加UseRouting。
如果该应用程序调用UseStaticFiles,将置于UseStaticFiles之前 UseRouting。
如果应用使用身份验证/授权功能,如AuthorizePage或[Authorize],将对UseAuthentication并UseAuthorization后 UseRouting。
如果应用使用CORS功能,如[EnableCors],将放置UseCors下一步。
替换UseMvc或UseSignalR与UseEndpoints。
以下是一种Startup.Configure典型的 ASP.NET Core 2.2 应用中:

  1. public void Configure(IApplicationBuilder app)
  2. {
  3. ...
  4. app.UseStaticFiles();
  5. app.UseAuthentication();
  6. app.UseSignalR(hubs =>
  7. {
  8. hubs.MapHub<ChatHub>("/chat");
  9. });
  10. app.UseMvc(routes =>
  11. {
  12. routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
  13. });
  14. }
复制代码

现在的控制器映射内发生UseEndpoints。
添加MapControllers如果应用使用属性路由。 由于路由包括对许多框架在 ASP.NET Core 3.0 或更高版本的支持,添加属性路由的控制器是参加。
将为以下内容:
MapRoute 使用 MapControllerRoute
MapAreaRoute 使用 MapAreaControllerRoute
由于路由现在包括对不止是 MVC 的支持,已更改了术语进行明确说明他们所做的这些方法。 如传统路由MapControllerRoute / MapAreaControllerRoute / MapDefaultControllerRoute它们要添加的顺序应用。 将第一位更具体的路由 (如某一区域的路由)。
如下示例中:
MapControllers 添加了对属性路由的控制器支持。
MapAreaControllerRoute 将控制器的传统路由添加区域。
MapControllerRoute 添加控制器的常规路由。
现在映射 Razor 页面内发生UseEndpoints。
添加MapRazorPages如果应用使用 Razor 页面。 由于终结点路由包括对许多框架的支持添加 Razor 页面现在参加。
更新后asp.netCore3.0中Startup.Configure代码:

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. else
  8. {
  9. app.UseExceptionHandler("/Home/Error");
  10. // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  11. app.UseHsts();
  12. }
  13. app.UseHttpsRedirection();
  14. app.UseStaticFiles();
  15. app.UseCookiePolicy();
  16. app.UseRouting();
  17. app.UseAuthorization();
  18. app.UseEndpoints(endpoints =>
  19. {
  20. endpoints.MapControllerRoute(
  21. name: "default",
  22. pattern: "{controller=Home}/{action=Index}/{id?}");
  23. endpoints.MapAreaControllerRoute(
  24. name: "areas", "areas",
  25. pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
  26. endpoints.MapRazorPages();
  27. });
  28. }
复制代码

如果要进行分区路由,需要在控制器Controller头加Area和Route标签,否则不能像在asp.netCore2.0中自动路由控制器和Action。示例代码如下:

  1. namespace WebApplication1.Areas.CMS.Controllers
  2. {
  3. [Area("CMS")]
  4. [Route("CMS/[controller]/[action]")]
  5. public class NewsController : Controller
  6. {
  7. public IActionResult Index()
  8. {
  9. return View();
  10. }
  11. public IActionResult List()
  12. {
  13. return View();
  14. }
  15. }
  16. }
复制代码

这两句一定要加 [Area("CMS")]、[Route("CMS/[controller]/[action]")]

总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家的支持。

关注我们,获得更多技术知识


来源:https://blog.csdn.net/jb_1352461/article/details/91983078
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:55 , Processed in 0.456931 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表