ASP.NET Route包含多个参数

时间:2014-04-23 07:46:03

标签: asp.net-mvc asp.net-mvc-routing

这是情景:

我们希望路线像" {param1} {param2}"其中param1是字符串类型,param2是int类型。我们知道,ASP.NET MVC路由不支持两个连续的参数。而且我知道,我们可以像" {param1} / {param2}"那样分析路线,但这不是我想要的。

所以我的问题是如何在MVC路由中实现两个连续参数的场景?

1 个答案:

答案 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;
}

希望这有帮助。