将asp.net core 2.0 url重定向到小写

Sel*_*Net 9 lowercase url-redirection asp.net-core-2.0

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

使用这个:

services.AddRouting(options => options.LowercaseUrls = true);
Run Code Online (Sandbox Code Playgroud)

但是,虽然这对于生成URL很好,但它似乎没有做任何实际的ENFORCE,也就是说,将任何非全部小写的URL重定向到相应的小写URL(最好是通过301重定向).

我知道人们通过不同的套管网址访问我的网站,我希望它们永久都是小写的.

通过RewriteOptions和Regex进行标准重定向是唯一的方法吗?这样做的恰当表达方式是什么:

var options = new RewriteOptions().AddRedirect("???", "????");
Run Code Online (Sandbox Code Playgroud)

或者还有另一种方式吗?

Ben*_*eld 6

我感谢这已经有几个月的历史了,但是对于可能正在寻找相同解决方案的人们,您可以添加一个复杂的重定向实现,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;
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

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

new RewriteOptions().Add(new RedirectLowerCaseRule());
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 您不想小写request.QueryString()。这将包含合法的大写值。 (3认同)
  • Microsoft.AspNetCore.Http具有一个StatusStats枚举,可以代替(int)HttpStatusCode.XXX来使用。它们在每个枚举名称中都包含状态代码号,例如`StatusCodes.Status301MovedPermanently`。 (2认同)