經過一些更多的Google搜索後,我在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;
}
}
這個擴展,然後在Global.asax中的RegisterRoutes方法類似所謂的...
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作爲網址,而且我仍然難以確定如何實現這一目標。 – Stuart 2010-05-21 08:41:25
如果這是您的目標,一種解決方案可能是爲HtmlHelper創建您自己的擴展方法來生成URL。 – 2010-05-21 17:23:39
-1:這個答案基本上重述了這個問題,但並沒有提出任何解決方案。 – 2011-10-17 13:03:08