欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于asp.netCore3.0区域和路由配置

程序员文章站 2022-03-20 11:56:38
在ASP.NET Core 3.0中路由配置和2.0不一样了 一、MVC 服务注册 ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureServices。三个新的*扩展方法与 MVC 方案上IServiceCollection可用。 模板使 ......

 在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]")]