繁体   English   中英

Asp.net 核心 2.1 UseHttpsRedirection 在 IIS 中不起作用

[英]Asp.net core 2.1 UseHttpsRedirection not working in IIS

我将我的 asp.net core 2.1 WebApi 部署到 IIS 10。(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();
    }

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

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

有关更多信息,请参见此处: https : //github.com/aspnet/AspNetCore/issues/3176

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

app.UserHttpsRedirection()

然后打电话

app.UseHsts()

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

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

IIS - SSL 设置

IIS - SSL 设置

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

但首先你应该仔细阅读文档: 在 ASP.NET Core 中强制执行 HTTPS

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

  • 不监听 HTTP。
  • 关闭状态码为 400(错误请求)的连接并且不提供请求。

在我的 startup.cs 我做了这个设置

public void ConfigureServices(IServiceCollection services)
{
    try
    {
        //..other codes

        services.AddHttpsRedirection(options =>
        {
            options.HttpsPort = 443;
        });
    }
    catch (Exception ex)
    {
        string innerMessage = "";
        if (ex.InnerException != null)
            innerMessage = ex.InnerException.Message;

        Log.Logger.Error("ConfigureServices Message: " + ex.Message + " inner Message:" + innerMessage + "Env.Name:" + _env.EnvironmentName);
    }
}

在配置方法中,我是这样使用的

        app.UseHttpsRedirection();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM