ASP.NET Core MVC之route简单路由配置

ASP.NET Core MVC的路由配置一般分为两种,约定路由和特性路由。下面分别介绍两种路由的配置方法。
一:约定路由
约定路由顾名思义,是我们约定好的路由规则,程序根据约定,访问对应的controller,首先建立一个ASP.NET Core Web项目,选择空模板,在Startup类中的ConfigureServices方法中注册MVC服务。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

然后在Configure方法中使用mvc中间件,并添加路由规则
1.使用默认路由方法:

			//默认mvc路由
            //app.UseMvcWithDefaultRoute();
            

UseMvcWithDefaultRoute方法为默认路由,反编译源码如下:

public static IApplicationBuilder UseMvcWithDefaultRoute(
      this IApplicationBuilder app)
    {
      if (app == null)
        throw new ArgumentNullException(nameof (app));
      return app.UseMvc((Action<IRouteBuilder>) (routes => routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}")));
    }

我们由此可以看到,它的路由规则为默认home/index,id可为空,即如果url为localhost:2222/,那么他会默认寻找homeController的Index方法,当然如果url为localhost:/2222/about/me,那么他会访问aboutController的Me方法。
2.自定义路由规则
我们可以在mvc中间件中定义路由规则,代码如下:

app.UseMvc(builder =>
            {
                //按约定配置路由
                //Home/Index->HomeController Index(3)
                //默认值为Home,Index
                //builder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
            });

如上,我们也可以设置默认值,但相对较灵活。
二.特性路由
我们可以在Controller文件中利用attribute特性配置路由,例:

	[Route("")]//特性配置路由,留空为默认访问此Controller
    public class AboutController
    {
        [Route("")]//特性配置路由,留空为默认访问此action
        public string Me()
        {
            return "mike";
        }
        [Route("company")]
        public string Company()
        {
            return "no company";
        }
    }

如上代码,AboutController的route内容为“”,即为默认访问次controller,action同理,如不设置默认,则可加上名称,即

[Route("about")]//特性配置路由,留空为默认访问此Controller
    public class AboutController
    {
        [Route("me")]//特性配置路由,留空为默认访问此action
        public string Me()
        {
            return "mike";
        }
        [Route("company")]
        public string Company()
        {
            return "no company";
        }
    }

这样,url为localhost:2222/about/me就能访问此controller的me方法。
更为灵活的配置如下:

[Route("[controller]/[action]")]//特性配置路由,
    public class OtherController
    {
        public string Me()
        {
            return "zfy";
        }
        public string Company()
        {
            return "no company";
        }
    }

如此配置,程序会根据url来寻找对应的controller和action。
一般webapi会用特性路由配置。
注意:两种配置方法不能共存,只能选用一种。

猜你喜欢

转载自blog.csdn.net/weixin_39714231/article/details/87257220