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)
或者还有另一种方式吗?
我感谢这已经有几个月的历史了,但是对于可能正在寻找相同解决方案的人们,您可以添加一个复杂的重定向实现,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)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |