我想使用自定义网址:
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
答案 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/