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

时间:2016-06-14 08:25:35

标签: c# asp.net-mvc asp.net-mvc-routing attributerouting

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

[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代码)。

如何混合并正确配置?

1 个答案:

答案 0 :(得分:1)

您需要确保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