【问题标题】:Asp.net core 2.1 UseHttpsRedirection not working in IISAsp.net core 2.1 UseHttpsRedirection 在 IIS 中不起作用
【发布时间】:2019-01-08 06:48:50
【问题描述】:

我将我的 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();
    }

【问题讨论】:

    标签: c# iis asp.net-core


    【解决方案1】:

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

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

    更多信息请看这里:https://github.com/aspnet/AspNetCore/issues/3176

    【讨论】:

    • 您好,我遇到了这个问题,我将端口更改为 443,但它并没有解决问题。请问您还有其他选择吗?
    【解决方案2】:

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

    app.UserHttpsRedirection()
    

    然后调用

    app.UseHsts()
    

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

    【讨论】:

    • 这可行,但很奇怪,因为documentation 显示的顺序不正确。
    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 这是我的解决方案。
    • 谢谢! 60 分钟追我的尾巴。
    【解决方案4】:

    在我的 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();
            }
    

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2018-12-20
      • 1970-01-01
      • 2021-07-25
      • 2018-09-07
      • 1970-01-01
      • 2019-03-05
      • 2018-12-23
      • 2021-10-03
      相关资源
      最近更新 更多