将ASP.NET核心2.0 URL重定向为小写 [英] Redirect asp.net core 2.0 urls to lowercase

查看:0
本文介绍了将ASP.NET核心2.0 URL重定向为小写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经看到,您可以在ASP.NET Core 2.0中配置路由以生成小写URL,如下所述:https://stackoverflow.com/a/45777372/83825

使用此选项:

services.AddRouting(options => options.LowercaseUrls = true);

但是,尽管这可以很好地生成URL,但它似乎并没有实际执行它们,也就是说,将所有不全是小写的URL重定向到相应的小写URL(最好是通过301重定向)。

我知道人们通过不同大小写的URL访问我的网站,我希望它们都是小写的,并且是永久的。

通过重写选项和正则表达式执行标准重定向是唯一的方法吗?执行此操作的适当表达式是什么:

var options = new RewriteOptions().AddRedirect("???", "????");

还是有其他方法?

推荐答案

我很感激这是几个月前的事了,但是对于可能正在寻找相同解决方案的人,您可以添加一个复杂的重定向实现IRule,例如:

public class RedirectLowerCaseRule : IRule
{
    public int StatusCode { get; } = (int)HttpStatusCode.MovedPermanently;

    public void ApplyRule(RewriteContext context)
    {
        HttpRequest request = context.HttpContext.Request;
        PathString path = context.HttpContext.Request.Path;
        HostString host = context.HttpContext.Request.Host;

        if (path.HasValue && path.Value.Any(char.IsUpper) || host.HasValue && host.Value.Any(char.IsUpper))
        {
            HttpResponse response = context.HttpContext.Response;
            response.StatusCode = StatusCode;
            response.Headers[HeaderNames.Location] = (request.Scheme + "://" + host.Value + request.PathBase + request.Path).ToLower() + request.QueryString;
            context.Result = RuleResult.EndResponse; 
        }
        else
        {
            context.Result = RuleResult.ContinueRules;
        } 
    }
}

然后可以将其应用于Configure方法下的Startup.cs中,如下所示:

new RewriteOptions().Add(new RedirectLowerCaseRule());

希望这能有所帮助!

这篇关于将ASP.NET核心2.0 URL重定向为小写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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