将ASP.NET核心2.0 URL重定向为小写 [英] Redirect asp.net core 2.0 urls to lowercase
本文介绍了将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屋!
查看全文