После еще нескольких поисковых запросов, я задал вопрос в this post. Используя ответ на этот вопрос, я смог собрать подходящий метод расширения маршрутизации, который я включил ниже.
public static class RouteCollectionExtensions
{
public static void CustomMapRoute(this RouteCollection routes, string name, string url, object defaults)
{
routes.CustomMapRoute(name, url, defaults, null, null);
}
public static void CustomMapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)
{
routes.CustomMapRoute(name, url, defaults, namespaces, null);
}
public static void CustomMapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces, object constraints)
{
if (routes == null)
throw new ArgumentNullException("routes");
if (url == null)
throw new ArgumentNullException("url");
var route = new CustomRoute(url, new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary()
};
if ((namespaces != null) && (namespaces.Length > 0))
{
route.DataTokens["Namespaces"] = namespaces;
}
if (String.IsNullOrEmpty(name))
routes.Add(route);
else
routes.Add(name, route);
}
}
public class CustomRoute : Route
{
public CustomRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler) { }
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;
}
}
Это расширение затем вызывается методом RegisterRoutes в global.asax как так ...
routes.CustomMapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "MyControllers" }
);
Спасибо за ответ. Однако на самом деле я хочу иметь http: // myserver/test? Q = search + twitter в качестве URL-адреса в моем браузере, и я все еще в тупике относительно того, как вы можете это достичь. – Stuart
Если это ваша цель, одним из решений может быть создание собственного метода расширения для HtmlHelper для генерации URL-адреса. –
-1: Этот ответ в основном перефразирует вопрос, но не предлагает никакого решения. –