防止AddRedirectToWwwPermanent()将“ www”添加到ASP.NET Core 2.1中* .azurewebsites.net的前面

Wel*_*ing 3 c# azure asp.net-core asp.net-core-2.1

当我将网站部署为Azure Web App时,我的AddRedirectToWwwPermanent()重写规则是添加“ www”。到默认天蓝色URL的前面,例如www.myproject.azurewebsites.net。在子域中使用“ www”会导致页面无法加载。

有没有一种方法可以跳过AddRedirectToWwwPermanent()专门针对*.azurewebsites.netURL 的重写规则?

我目前在使用Rewriter Startup.cs

app.UseRewriter(new RewriteOptions()
    .AddRedirectToWwwPermanent()
);
Run Code Online (Sandbox Code Playgroud)

或者,是否可以将*.azurewebsites.netURL 重定向到我自己的自定义域?我已经尝试了以下方法,但是不起作用:

app.UseRewriter(new RewriteOptions()
    .AddRedirect(@"myproject.azurewebsites.net", @"www.example.com", StatusCodes.Status301MovedPermanently)
    .AddRedirectToWwwPermanent()
);
Run Code Online (Sandbox Code Playgroud)

更新,也尝试过:

app.UseRewriter(new RewriteOptions()
        .AddRedirect(@"https://myproject.azurewebsites.net", @"https://www.example.com", StatusCodes.Status301MovedPermanently)
        .AddRedirectToWwwPermanent()
    );
Run Code Online (Sandbox Code Playgroud)

Wel*_*ing 5

这是我的解决方案,可在中使用ASP.NET Core 2.1。但是,我不知道这是否是进行重定向的最有效方法,因此我愿意接受更好的建议。

由于无法使内置AddRedirect()规则正常工作(我仍然认为我可能一直在使用错误的规则),因此我创建了一个自定义重写规则来进行重定向。

这是my 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在中Startup.cs,我在以下之前调用了新规则AddRedirectToWwwPermanent()

app.UseRewriter(new RewriteOptions()
    .Add(new RedirectAzureWebsitesRule())
    .AddRedirectToWwwPermanent()
);
Run Code Online (Sandbox Code Playgroud)