在asp.net core 3.0中路由配置和2.0不一样了

一、mvc 服务注册

asp.net core 3.0 添加了用于注册内部的 mvc 方案的新选项startup.configureservices。

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

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

public void configureservices(iservicecollection services)
{
 services.addcontrollers();
}

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

public void configureservices(iservicecollection services)
{
 services.addcontrollerswithviews();
}

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

public void configureservices(iservicecollection services)
{
 services.addrazorpages();
}

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

public void configureservices(iservicecollection services)
{
 services.addcontrollers();
 services.addrazorpages();
}

二、startup.configure配置

一般不建议:

添加userouting。

如果该应用程序调用usestaticfiles,将置于usestaticfiles之前 userouting。

如果应用使用身份验证/授权功能,如authorizepage或[authorize],将对useauthentication并useauthorization后 userouting。

如果应用使用cors功能,如[enablecors],将放置usecors下一步。

替换usemvc或usesignalr与useendpoints。

以下是一种startup.configure典型的 asp.net core 2.2 应用中:

public void configure(iapplicationbuilder app)
{
 ...

 app.usestaticfiles();
 
 app.useauthentication();

 app.usesignalr(hubs =>
 {
  hubs.maphub<chathub>("/chat");
 });

 app.usemvc(routes =>
 {
  routes.maproute("default", "{controller=home}/{action=index}/{id?}");
 });
}

现在的控制器映射内发生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代码:

public void configure(iapplicationbuilder app, iwebhostenvironment env)
  {
   if (env.isdevelopment())
   {
    app.usedeveloperexceptionpage();
   }
   else
   {
    app.useexceptionhandler("/home/error");
    // the default hsts value is 30 days. you may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.usehsts();
   }

   app.usehttpsredirection();
   app.usestaticfiles();

   app.usecookiepolicy();

   app.userouting();

   app.useauthorization();

   app.useendpoints(endpoints =>
   {
    endpoints.mapcontrollerroute(
     name: "default",
     pattern: "{controller=home}/{action=index}/{id?}");

    endpoints.mapareacontrollerroute(
     name: "areas", "areas",
     pattern: "{area:exists}/{controller=home}/{action=index}/{id?}");
    endpoints.maprazorpages();
   });
  }

如果要进行分区路由,需要在控制器controller头加area和route标签,否则不能像在asp.netcore2.0中自动路由控制器和action。示例代码如下:

namespace webapplication1.areas.cms.controllers
{
 [area("cms")]
 [route("cms/[controller]/[action]")]
 public class newscontroller : controller
 {
  public iactionresult index()
  {
   return view();
  }
  public iactionresult list()
  {
   return view();
  }
 }
}

这两句一定要加[area("cms")]、[route("cms/[controller]/[action]")]

总结

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