使用默认路由的属性路由

Attribute Routing with Default Route

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

~/
~/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

空路由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?}");
[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(){}

 }