在asp.net mvc url中格式化查询字符串的最佳方法?

时间:2010-05-25 09:12:18

标签: asp.net-mvc routing

我注意到如果你通过asp.net mvc发送了一个查询字符串routevalue,你最终将所有空格urlencoded到“%20”。覆盖此格式的最佳方法是什么,因为我希望将空格转换为“+”符号?

我在考虑使用一个自定义的Route对象或一个派生自IRouteHandler的类,但我会很感激您的建议。

1 个答案:

答案 0 :(得分:3)

您可以尝试编写自定义路线:

public class CustomRoute : Route
{
    public CustomRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) 
        : base(url, defaults, routeHandler)
    { }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        var path = base.GetVirtualPath(requestContext, values);
        if (path != null)
        {
            path.VirtualPath = path.VirtualPath.Replace("%20", "+");
        }
        return path;
    }
}

并按照以下方式注册:

routes.Add(
    new CustomRoute(
        "{controller}/{action}/{id}",
        new RouteValueDictionary(new { 
            controller = "Home", 
            action = "Index", 
            id = UrlParameter.Optional 
        }),
        new MvcRouteHandler()
    )
);