04-配置多个路由

我们在UseMvc里面可以添加多个路由,这样可以添加多个规则。

例如我们就拿博客园的用户博客首页地址为例

http://www.COMblogs.com/FoxDevelopcn

因为它是特殊url地址 所以我们给他配置的路由规则 需要放在默认路由的上面

加入一个叫blog的路由

app.UseMvc(routes =>
{
    //特殊路由放上面
    //博客专用的路由
    routes.MapRoute(
            name:"blog",
            template :"{name}",
            defaults : new { controller = "Blog", action = "Index" }
        );

    //默认路由放在下面
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});Code language: JavaScript (javascript)
public class BlogController : Controller
{
    public IActionResult Index(string name)
    {
        return View();
    }
}

现在我们访问

http://localhost:15883/FoxDevelopcn

http://localhost:15883/zhansan

但是访问http://localhost:15883/home

也是跳到blog 而不是跳到首页

访问http://localhost:15883/home/index

还是可以访问以前的home页面

那是因为第一个路由匹配不上 就会往下找第二个路由 第二个路由就可以匹配得上

如果我们想http://localhost:15883/home/

这个可以访问 则需要再配置一个路由 放在blog路由上面 用来专门为首页而做

app.UseMvc(routes =>
{
    //特殊路由放上面
    routes.MapRoute(
            name: "home",
            template: "home",
            defaults: new { controller = "Home", action = "Index" }
        );

    //博客专用的路由
    routes.MapRoute(
            name: "blog",
            template: "{name}",
            defaults: new { controller = "Blog", action = "Index" }
        );

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});Code language: JavaScript (javascript)

路由的匹配是从上到下的。所以 如果第一个路由匹配不了 就会找下一个路由。

当两个一致的Action方法都能通过这个路由的时候。这个时候 我们必须要进行处理 否则会抛出错误的。

我们可以来试一下。

同名路由加上[HttpPost]来约束Action的提交方式

一旦加上了httppost的标注 则表示我们这个action只能匹配是post的方式提交过来的请求。

如果是get的方式提交过来的 则无法请求

关于什么是get什么是post的 则需要同学们自己百度一下。

[HttpGet]
public IActionResult Learn(int id)
{
    return View();
}

//这个action在c#是没问题的 但是在mvc框架里面 就会有冲突
[HttpPost]
public IActionResult Learn(string index)
{
    return View();
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注