特性路由使用一组特性标注直接将Action映射到路由模板。
下面我们把Configure里面的所有路由都去掉。
如果没了路由 我们就没法找到对应的处理action了。
这个时候我们可以使用[Route]标注来指定对应的url规则
去掉默认路由后
app.UseMvc();Code language: CSS (css)
然后单独给action添加特性路由
[Route("")]
[Route("home")]
[Route("home/index")]
public IActionResult Index()
{
return View();
}
[Route("home/abc")]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}Code language: PHP (php)
这个时候 还是可以访问得了的
另外 如果冲突了 会怎么样
比如我们给course控制器的index也添加这样的特性标注
public class CourseController : Controller
{
[Route("")]
[Route("home")]
[Route("home/index")]
public IActionResult Index()
{
return View();
}
这个时候 就会报错了
An unhandled exception occurred while processing the request.
AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
FirstCoreMVC.Controllers.CourseController.Index (FirstCoreMVC)
FirstCoreMVC.Controllers.HomeController.Index (FirstCoreMVC)
这个时候 可以使用[HttpPost]和[HttpGet来进行约束]
比如下面的代码是会报错的
[Route("home/abc")]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
[Route("home/abc")]
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}Code language: PHP (php)
但是改为这样
[HttpGet("home/abc")]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
[HttpPost("home/abc")]
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}Code language: PHP (php)
如果带有参数的话 可以
[HttpGet("home/abc/{id}")]
public IActionResult About(int id)
{
ViewData["Message"] = "Your application description page.";
return View();
}Code language: PHP (php)