MVC自定义操作路由 - 404错误

时间:2016-05-27 19:34:52

标签: asp.net-mvc routes url-routing asp.net-mvc-routing attributerouting

我想使用自定义网址:

http://localhost/MyController/MyView/11/25?someID=0

这样做,我有以下行动:

[Route("{page}/{size}")]
public ActionResult MyView(int page = 0, int size = 25, FilterModel filterModel = null)
{
   ...
}

但是我收到404错误。怎么了?例如,该URL有效:

http://localhost/MyController/MyView?someID=0

2 个答案:

答案 0 :(得分:1)

您定义的路线:

[Route("{page}/{size}")]
public ActionResult MyView(int page = 0, int size = 25, FilterModel filterModel = null)
{
   ...
}

与您想要的网址不符:

http://localhost/MyController/MyView/11/25?someID=0

您需要确保它们是相同的(假设您没有在控制器上使用RoutePrefix属性):

[Route("MyController/MyView/{page}/{size}")]
public ActionResult MyView(int page = 0, int size = 25, FilterModel filterModel = null)
{
   ...
}

网址http://localhost/MyController/MyView?someID=0的工作原因很可能是它与您的Default路由匹配,并将正确的控制器和操作名称传递给框架以获取操作方法。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

另请注意,您需要在默认路由之前使用route.MapMvcAttributeRoutes() 才能启用属性路由。

答案 1 :(得分:0)

这是属性路由。对最后的答案道歉。

routes.MapRoute(     名称:“MyView”,     url:“{page} / {size}”,     默认值:new {controller =“MyController”,action =“MyView”},     约束:new {page =“”,size =“”} );

https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/