具有默认路由的属性路由

B Z*_*B Z 4 c# asp.net-core-mvc asp.net-core asp.net-core-routing asp.net-core-mvc-2.0

使用基于属性的路由我想匹配以下路由:

~/
~/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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过添加Route("[action]"),Route("Index")和其他组合,但仍然没有得到匹配:

/Home/Index

Rac*_*lan 10

空路由Route("")与控制器上的路由组合,用于Route("/")覆盖它而不是与它组合:

[Route("[controller]/[action]")]
public class HomeController : Controller {

    [HttpGet]
    [Route("/")]
    [Route("/[controller]")]
    public IActionResult Index() {
        return View();
    }

    [HttpGet]
    public IActionResult Error() {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以删除/[action]控制器,这使它更容易(不需要覆盖),但是您必须在每个操作上定义路由.

我假设您有意使用属性路由而不是传统路由,因此上述答案就是您所需要的.但是,如果假设错误,可以通过简单的传统路由轻松实现:

routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
Run Code Online (Sandbox Code Playgroud)