我们在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)
Previous: 03-设置路由中间件
Next: 05-特性路由