默认路由干扰 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
我有一个带有操作方法的控制器,我已经配置了属性路由:
[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