当前位置:  开发笔记 > 编程语言 > 正文

由于不区分大小写的URL和默认值,我如何避免ASP.NET MVC中的重复内容?

如何解决《由于不区分大小写的URL和默认值,我如何避免ASP.NETMVC中的重复内容?》经验,为你挑选了2个好方法。

我也在研究这个问题.我显然会顺从ScottGu.我谦卑地提供了解决这个问题的方法.

将以下代码添加到global.asax:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // If upper case letters are found in the URL, redirect to lower case URL.
    if (Regex.IsMatch(HttpContext.Current.Request.Url.ToString(), @"[A-Z]") == true)
    {
        string LowercaseURL = HttpContext.Current.Request.Url.ToString().ToLower();

        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location",LowercaseURL);
        Response.End();
    }
}

一个很好的问题!



1> Gabe Sumner..:

我也在研究这个问题.我显然会顺从ScottGu.我谦卑地提供了解决这个问题的方法.

将以下代码添加到global.asax:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // If upper case letters are found in the URL, redirect to lower case URL.
    if (Regex.IsMatch(HttpContext.Current.Request.Url.ToString(), @"[A-Z]") == true)
    {
        string LowercaseURL = HttpContext.Current.Request.Url.ToString().ToLower();

        Response.Clear();
        Response.Status = "301 Moved Permanently";
        Response.AddHeader("Location",LowercaseURL);
        Response.End();
    }
}

一个很好的问题!


据我所知,这有潜在的缺点.打开Chrome(或其他具有良好调试功能的浏览器)并注意所有对图像,样式表,javascript等的请求都被重定向(假设您将它们放在名为"Content"或其他任何内容的文件夹中.)您不希望浏览器必须将这些资产的请求数量增加一倍,因此要么确保它们是小写的,要么不为实际不是路由的链接发送301s.

2> Danny Tuppen..:

除了在这里发帖,我还通过电子邮件向ScottGu发送电子邮件,看他是否有好的回复.他给出了一个为路由添加约束的示例,因此您只能响应小写网址:

public class LowercaseConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route,
            string parameterName, RouteValueDictionary values,
            RouteDirection routeDirection)
    {
        string value = (string)values[parameterName];

        return Equals(value, value.ToLower());
    }

并且在寄存器路由方法中:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "home", action = "index", id = "" },
        new { controller = new LowercaseConstraint(), action = new LowercaseConstraint() }
    );
}

这是一个开始,但是我希望能够从Html.ActionLink和RedirectToAction等方法更改链接的生成以匹配.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有