使URL小写。任何容易或内建的方式吗? [英] making URL lowercase. Any easy or builtin way?
本文介绍了使URL小写。任何容易或内建的方式吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有简单的/内置的方式,使以小写网址为MVC3。
我有code,可以做,但找东西来实现简单。
routes.MapRouteLowercase(
默认,//路线名称
{控制器} / {行动} / {ID},// URL带参数
新{控制器=家,行动=指数,ID = UrlParameter.Optional} //参数默认
);公共类LowercaseRoute:路线
{
公共LowercaseRoute(字符串URL,IRouteHandler routeHandler)
:基地(URL,routeHandler)
{
} 公共LowercaseRoute(字符串URL,RouteValueDictionary违约,IRouteHandler routeHandler)
:基地(URL,默认,routeHandler)
{
} 公共LowercaseRoute(字符串URL,RouteValueDictionary违约,RouteValueDictionary限制,IRouteHandler routeHandler)
:基地(URL,默认,约束,routeHandler)
{
} 公共LowercaseRoute(字符串URL,RouteValueDictionary违约,RouteValueDictionary限制,RouteValueDictionary dataTokens,IRouteHandler routeHandler)
:基地(URL,默认,约束,dataTokens,routeHandler)
{
} 公众覆盖VirtualPathData GetVirtualPath(RequestContext的的RequestContext,RouteValueDictionary值)
{
VirtualPathData路径= base.GetVirtualPath(RequestContext的,值); 如果(路径!= NULL)
{
path.VirtualPath = path.VirtualPath.ToLowerInvariant();
} 返回路径;
}
}
公共静态类RouteCollectionExtensions
{
公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,字符串URL)
{
返回routes.MapRouteLowercase(名称,网址,空/ * *默认值/(对象)空/ * *限制/);
} 公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,字符串URL,对象的默认值)
{
返回routes.MapRouteLowercase(名称,网址,默认设置(对象)空/ * *限制/);
} 公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,字符串的URL,对象的默认值,对象约束)
{
返回routes.MapRouteLowercase(名称,网址,默认,约束,空/ *命名空间* /);
} 公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,URL字符串,字符串[]命名空间)
{
返回routes.MapRouteLowercase(名称,网址,空/ * *默认/,空/ * *的限制/,命名空间);
} 公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,字符串的URL,对象违约,字符串[]命名空间)
{
返回routes.MapRouteLowercase(名称,网址,默认值,空/ * *的限制/,命名空间);
} 公共静态路由MapRouteLowercase(这RouteCollection路线,字符串名称,字符串的URL,对象的默认值,对象的限制,字符串[]命名空间)
{
如果(路线== NULL)
{
抛出新的ArgumentNullException(路线);
}
如果(URL == NULL)
{
抛出新的ArgumentNullException(URL);
} 路线路线=新LowercaseRoute(网址,新MvcRouteHandler())
{
默认值=新RouteValueDictionary(默认)
约束=新RouteValueDictionary(约束)
DataTokens =新RouteValueDictionary()
}; 如果((命名空间= NULL)及!及(namespaces.Length大于0))
{
route.DataTokens [命名空间] =命名空间;
} routes.Add(名称,路线); 返回路线;
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,字符串URL)
{
返回context.MapRouteLowercase(名称,网址(对象)空/ * *默认/);
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,字符串URL,对象的默认值)
{
返回context.MapRouteLowercase(名称,网址,默认设置(对象)空/ * *限制/);
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,字符串的URL,对象的默认值,对象约束)
{
返回context.MapRouteLowercase(名称,网址,默认,约束,空/ *命名空间* /);
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,URL字符串,字符串[]命名空间)
{
返回context.MapRouteLowercase(名称,网址(对象)空/ * *默认/,命名空间);
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,字符串的URL,对象违约,字符串[]命名空间)
{
返回context.MapRouteLowercase(名称,网址,默认值,空/ * *的限制/,命名空间);
} 公共静态路由MapRouteLowercase(这AreaRegistrationContext背景下,字符串名称,字符串的URL,对象的默认值,对象的限制,字符串[]命名空间)
{
如果(命名空间== NULL和放大器;&安培; context.Namespaces!= NULL)
{
命名空间= context.Namespaces.ToArray();
} 路线路线= context.Routes.MapRouteLowercase(名称,网址,默认,约束,命名空间);
route.DataTokens [区] = context.AreaName; //禁用空间查找回退机制保持这一领域的意外回升
//控制器属于其他领域
布尔useNamespaceFallback =(命名空间== NULL || namespaces.Length == 0);
route.DataTokens [UseNamespaceFallback] = useNamespaceFallback; 返回路线;
}
}
解决方案
我刚刚注意到,有在.NET框架4.5的新属性。伟大的作品!
<一href=\"http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.lowercaseurls.aspx\">RouteCollection.LowercaseUrls
设置LowercaseUrls为true
公共静态无效的RegisterRoutes(RouteCollection路线)
{
routes.LowercaseUrls = TRUE;
...
}
创建链接
@ Html.ActionLink(登录,登录,帐户)
这将创建真棒,小写网址:)
&LT; A HREF =/帐号/密码&GT;登录上述&lt; / A&GT;
Is there any easy/builtin way to make URL in lowercase for MVC3.
I have code that could do it but looking something simple to implement.
routes.MapRouteLowercase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults
);
public class LowercaseRoute : Route
{
public LowercaseRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler)
{
}
public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler)
: base(url, defaults, routeHandler)
{
}
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler)
: base(url, defaults, constraints, routeHandler)
{
}
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler)
: base(url, defaults, constraints, dataTokens, routeHandler)
{
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
VirtualPathData path = base.GetVirtualPath(requestContext, values);
if (path != null)
{
path.VirtualPath = path.VirtualPath.ToLowerInvariant();
}
return path;
}
}
public static class RouteCollectionExtensions
{
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url)
{
return routes.MapRouteLowercase(name, url, null /* defaults */, (object)null /* constraints */);
}
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults)
{
return routes.MapRouteLowercase(name, url, defaults, (object)null /* constraints */);
}
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints)
{
return routes.MapRouteLowercase(name, url, defaults, constraints, null /* namespaces */);
}
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, string[] namespaces)
{
return routes.MapRouteLowercase(name, url, null /* defaults */, null /* constraints */, namespaces);
}
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)
{
return routes.MapRouteLowercase(name, url, defaults, null /* constraints */, namespaces);
}
public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)
{
if (routes == null)
{
throw new ArgumentNullException("routes");
}
if (url == null)
{
throw new ArgumentNullException("url");
}
Route route = new LowercaseRoute(url, new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary()
};
if ((namespaces != null) && (namespaces.Length > 0))
{
route.DataTokens["Namespaces"] = namespaces;
}
routes.Add(name, route);
return route;
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url)
{
return context.MapRouteLowercase(name, url, (object)null /* defaults */);
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults)
{
return context.MapRouteLowercase(name, url, defaults, (object)null /* constraints */);
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, object constraints)
{
return context.MapRouteLowercase(name, url, defaults, constraints, null /* namespaces */);
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, string[] namespaces)
{
return context.MapRouteLowercase(name, url, (object)null /* defaults */, namespaces);
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, string[] namespaces)
{
return context.MapRouteLowercase(name, url, defaults, null /* constraints */, namespaces);
}
public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, object constraints, string[] namespaces)
{
if (namespaces == null && context.Namespaces != null)
{
namespaces = context.Namespaces.ToArray();
}
Route route = context.Routes.MapRouteLowercase(name, url, defaults, constraints, namespaces);
route.DataTokens["area"] = context.AreaName;
// disabling the namespace lookup fallback mechanism keeps this areas from accidentally picking up
// controllers belonging to other areas
bool useNamespaceFallback = (namespaces == null || namespaces.Length == 0);
route.DataTokens["UseNamespaceFallback"] = useNamespaceFallback;
return route;
}
}
解决方案
I've just noticed that there is a new property in .NET Framework 4.5. Works great! RouteCollection.LowercaseUrls
Set LowercaseUrls to true
public static void RegisterRoutes(RouteCollection routes)
{
routes.LowercaseUrls = true;
...
}
Create a link
@Html.ActionLink("Log in", "Login", "Account")
That will create awesome, lowercase url :)
<a href="/account/login">Log in</a>
这篇关于使URL小写。任何容易或内建的方式吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文