ASP.NET Core 2.1 UseHttpsRedirection在IIS中不起作用

Cha*_*lie 8 c# iis asp.net-core

我将asp.net core 2.1 WebApi部署到IIS10。(IIS充当代理)

我在IIS中添加了SSL证书,并为不安全端口(8081)和安全端口(8082)进行了绑定。

但是,当我访问http:// localhost:8081 / api / values时,浏览器只会返回403 Forbidden,而不会将我重定向到https:// localhost:8082 / api / values

我的启动代码如下:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
           .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddHttpsRedirection(options=>
        {
            options.HttpsPort = 8082;
        });
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //app.UseForwardedHeaders();
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }
Run Code Online (Sandbox Code Playgroud)

Cal*_*nus 10

我发现的问题是,从.net core 2.0更改为.net core 2.1意味着需要在startup.cs中显式指定https端口

services.AddHttpsRedirection(options =>
    {
        options.HttpsPort = 443;
    });
Run Code Online (Sandbox Code Playgroud)

请参阅此处以获取更多信息:https : //github.com/aspnet/AspNetCore/issues/3176


Osk*_*erg 6

就我而言,错误在于我以不受支持的顺序调用事物。通过重新排列我的代码以首先调用:

app.UserHttpsRedirection()
Run Code Online (Sandbox Code Playgroud)

然后打电话

app.UseHsts()
Run Code Online (Sandbox Code Playgroud)

它开始起作用,而不是相反。


kma*_*zek 1

您收到此状态代码是因为您在 SSL 设置中选择了“需要 SSL”。

IIS - SSL 设置

IIS - SSL 设置

如果您想使用代码重定向到 https,请取消选中此选项。

但首先您应该仔细阅读文档:Enforce HTTPS in ASP.NET Core

不要在接收敏感信息的 Web API 上使用 RequireHttpsAttribute。RequireHttpsAttribute 使用 HTTP 状态代码将浏览器从 HTTP 重定向到 HTTPS。API 客户端可能无法理解或服从从 HTTP 到 HTTPS 的重定向。此类客户端可以通过 HTTP 发送信息。Web API 应该:

  • 不监听 HTTP。
  • 关闭状态代码 400(错误请求)的连接,并且不处理该请求。