使用基于属性的路由我想匹配以下路由:
~/ ~/Home ~/Home/Index
到 HomeController.Index ,以及此路线:
~/Home/Error
到 HomeController.Error 。这是我的配置:
[Route("[controller]/[action]")]
public class HomeController : Controller {
[HttpGet, Route(""), Route("~/")]
public IActionResult Index() {
return View();
}
[HttpGet]
public IActionResult Error() {
return View();
}
}
我尝试添加Route("[action]")
,Route("Index")
和其他组合,但仍无法匹配:
/Home/Index
答案 0 :(得分:8)
空路由Route("")
与控制器上的路由相结合,使用Route("/")
覆盖它而不是与之合并:
[Route("[controller]/[action]")]
public class HomeController : Controller {
[HttpGet]
[Route("/")]
[Route("/[controller]")]
public IActionResult Index() {
return View();
}
[HttpGet]
public IActionResult Error() {
return View();
}
}
或者,你可以删除控制器上的/[action]
,这样可以更容易(不需要覆盖),但是你必须在每个动作上定义一个路径。
我假设您有意使用属性路由而不是传统路由,因此上述答案就是您所需要的。但是,如果假设错误,可以通过简单的传统路由轻松实现:
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
答案 1 :(得分:2)
[Route("[controller]")]
public class HomeController : Controller
{
[Route("")] // Matches 'Home'
[Route("Index")] // Matches 'Home/Index'
public IActionResult Index(){}
[Route("Error")] // Matches 'Home/Error'
public IActionResult Error(){}
}