使URL小写。任何容易或内建的方式吗? [英] making URL lowercase. Any easy or builtin way?

查看:86
本文介绍了使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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆