默认路由干扰 ASP.MVC 中属性路由中定义的路径

Default route interferes with defined path in attribute routing in ASP.MVC

我有一个带有操作方法的控制器,我已经配置了属性路由:

[RoutePrefix("foos")]
public class FooController : BaseController
{
        [HttpGet]
        [Route("")]
        public ActionResult List()
        {
            return View();
        }
}

路由配置如下:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapMvcAttributeRoutes();

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}

一切正常。当我导航到 http://webPageAddress/foo/ 时,我的操作被调用并返回列表。

现在我想将这条路线设置为默认路线。我添加了新属性:

[HttpGet]
[Route("~/")]
[Route("")]
public ActionResult List()
{
    return View();
}

结果是默认路由 (http://webPageAddress/) 有效,但旧路由 (http://webPageAddress/foo/) 不再有效(http 404 代码)。

如何混合使用并正确配置两者?

您需要确保http://webPageAddress/foo/ 的路由在http://webPageAddress/ 的 之前 注册。使用属性路由,唯一的方法是使用 Order 属性 来设置顺序。

[HttpGet]
[Route("~/", Order = 2)]
[Route("", Order = 1)]
public ActionResult List()
{
    return View();
}

参考:Understanding Routing Precedence in ASP.NET MVC and Web API