【问题标题】: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;
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2013-10-14
      • 2013-04-07
      相关资源
      最近更新 更多