这是情景:
我们希望路线像" {param1} {param2}"其中param1是字符串类型,param2是int类型。我们知道,ASP.NET MVC路由不支持两个连续的参数。而且我知道,我们可以像" {param1} / {param2}"那样分析路线,但这不是我想要的。
所以我的问题是如何在MVC路由中实现两个连续参数的场景?
答案 0 :(得分: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;
}
希望这有帮助。