【问题标题】:ASP.NET Route contains multiple argumentsASP.NET Route 包含多个参数
【发布时间】:2014-04-23 17:13:17
【问题描述】:
这是场景:
我们想要像“{param1}{param2}”这样的路由,其中 param1 是字符串类型,param2 是 int 类型。众所周知,ASP.NET MVC 路由不支持两个连续参数。而且我知道,我们可以像“{param1}/{param2}”这样分析路线,但这不是我想要的。
所以我的问题是如何实现 MVC 路由中两个连续参数的场景?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-routing
【解决方案1】:
您需要编写您的自定义MvcRouteHandler
public class MyRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var param = requestContext.RouteData.Values["param"].ToString();
var sbString = new StringBuilder();
var sbInt = new StringBuilder();
foreach (var ch in param.ToCharArray())
{
if (char.IsDigit(ch))
sbInt.Append(ch);
else
sbString.Append(ch);
}
requestContext.RouteData.Values["param1"] = sbString.ToString();
requestContext.RouteData.Values["param2"] = sbInt.ToString();
return base.GetHttpHandler(requestContext);
}
}
在 global.asax 中添加您的路由并指定它将使用的自定义 RouteHandler。
routes.MapRoute(
"Default",
"Test/{param}",
new { controller = "Default", action = "Index"}
).RouteHandler = new MyRouteHandler();
使用 param1 和 param2 作为动作参数。
public string Index(string param1, int param2)
{
return param1 + "|" + param2;
}
希望这会有所帮助。