Вот мое решение, которое работает в ASP.NET Core 2.1
.Тем не менее, я не знаю, является ли это наиболее эффективным способом сделать перенаправление, поэтому я открыт для лучших предложений.
Поскольку я не смог заставить работать встроенное правило AddRedirect()
(Я все еще думаю, что, возможно, я просто использовал его неправильно), я создал собственное правило перезаписи для выполнения перенаправления.
Вот мой RedirectAzureWebsitesRule
, который перенаправляет *.azurewebsites.net
в пользовательский домен:
public class RedirectAzureWebsitesRule : IRule
{
public int StatusCode { get; } = (int)HttpStatusCode.MovedPermanently;
public void ApplyRule(RewriteContext context)
{
HttpRequest request = context.HttpContext.Request;
HostString host = context.HttpContext.Request.Host;
if (host.HasValue && host.Value == "my-project.azurewebsites.net")
{
HttpResponse response = context.HttpContext.Response;
response.StatusCode = StatusCode;
response.Headers[HeaderNames.Location] = request.Scheme + "://" + "www.example.com" + request.PathBase + request.Path + request.QueryString;
context.Result = RuleResult.EndResponse;
}
else
{
context.Result = RuleResult.ContinueRules;
}
}
}
Затем в Startup.cs
я вызвал новое правило, прежде чем AddRedirectToWwwPermanent()
:
app.UseRewriter(new RewriteOptions()
.Add(new RedirectAzureWebsitesRule())
.AddRedirectToWwwPermanent()
);