Asp.net mvc 4 MVC4路由中的可选中间参数
我试图创建一个控制器操作,该操作接收多个参数以过滤作用域,然后最后一个参数是分页结果所需的分页参数Asp.net mvc 4 MVC4路由中的可选中间参数,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我试图创建一个控制器操作,该操作接收多个参数以过滤作用域,然后最后一个参数是分页结果所需的分页参数 //Example Action public ActionResult Details(string time, string regionscope, string localscope = null, int page = 1) { } //RouteConfig.cs routes.MapRoute( name: "LocationWithLocalScopeRoute",
//Example Action
public ActionResult Details(string time, string regionscope, string localscope = null, int page = 1) {
}
//RouteConfig.cs
routes.MapRoute(
name: "LocationWithLocalScopeRoute",
url: "/Details/{time}/{regionscope}/{localscope}/{page}",
defaults: new
{
controller = "Location",
action = "Details",
localscope = UrlParameter.Optional
}
);
我是否可以排除localscope
参数,但控制器仍将page
参数解释为页码(同时仍保持漂亮的URL)
我知道我可以在现有路线之前添加路线:
//RouteConfig.cs
routes.MapRoute(
name: "LocationWithNoLocalScopeRoute",
url: "/Details/{time}/{regionscope}/{page}",
defaults: new
{
controller = "Location",
action = "Details"
}
);
我还意识到我可以将page
放在任何其他参数之前
routes.MapRoute(
name: "LocationWithLocalScopeRoute",
url: "/Details/{page}/{time}/{regionscope}/{localscope}",
defaults: new
{
controller = "Location",
action = "Details",
localscope = UrlParameter.Optional
}
);
我只是想知道是否有一种方法可以让它在一个路由定义中工作,同时仍然让测试URL工作。否,除非创建另一个特定路由或将
localscope
作为最后一个参数
使用路由时,只有最后一个参数可以标记为urlparmeter。可选
。如果多个选项是可选的,则路由引擎无法知道哪个路由段应用于哪个方法参数
在您的情况下,当url为
。/Details/May-17/Mid/1
时,值为1
的最后一段是localscope
的值还是page
的值?无法确定这一点,因此,如果要使用@url.Action()
(或生成url的其他方法之一)生成url,则将使用查询字符串值而不是路由值生成url。简短回答是否(除非创建多个路由)。只有最后一个参数是可选的。@StephenMuecke是我添加的备选选项中的一个,您推荐哪一个?或者如果你有其他的方法,我很乐意阅读。就我个人而言,我会选择你的第一个选择,只是因为我认为作为一个url,有页码更有意义last@StephenMuecke,你介意把其中的一部分写进答案里吗?这样我就可以核对一下。
routes.MapRoute(
name: "LocationWithLocalScopeRoute",
url: "/Details/{page}/{time}/{regionscope}/{localscope}",
defaults: new
{
controller = "Location",
action = "Details",
localscope = UrlParameter.Optional
}
);