Asp.net core 2.1 UseHttpsRedirection не работает в IIS

Я развернул свое ядро ​​asp.net 2.1 WebApi в IIS 10. (IIS работал как прокси)

Я добавил сертификат SSL в IIS и привязки как для незащищенного порта (8081), так и для безопасного порта (8082).

Но когда я захожу в http: // локальный: 8081 / api / значения, браузер просто возвращает мне 403 Forbidden, а не перенаправляет меня на https: // локальный: 8082 / api / значения.

Мой код запуска выглядит следующим образом:

    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();
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
0
9 892
4

Ответы 4

Вы получили этот код статуса, потому что вы выбрали Требовать SSL в Настройках SSL.

IIS - SSL Settings

IIS - SSL Settings

Если вы хотите использовать свой код для перенаправления на https, снимите этот флажок.

Но сначала следует внимательно прочитать документацию: Принудительное использование HTTPS в ASP.NET Core

Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API clients may not understand or obey redirects from HTTP to HTTPS. Such clients may send information over HTTP. Web APIs should either:

  • Not listen on HTTP.
  • Close the connection with status code 400 (Bad Request) and not serve the request.

Это было для меня решением.

Jay 02.04.2019 21:22

Спасибо! 60 минут погони за хвостом.

danmc 17.09.2020 02:20

Проблема, которую я обнаружил, заключалась в том, что изменение с .net core 2.0 на .net core 2.1 означало, что порт https необходимо было явно указать в startup.cs.

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

Подробнее см. Здесь: https://github.com/aspnet/AspNetCore/issues/3176

Привет, у меня возникла эта проблема, и я изменил свой порт на 443, но это не решает проблему. У вас есть другая альтернатива?

Damien Doumer 24.09.2019 12:12

В моем случае ошибка заключалась в том, что я звонил в неподдерживаемом порядке. Изменив свой код на первый вызов:

app.UserHttpsRedirection()

а потом позвони

app.UseHsts()

это начало работать, а не наоборот.

Это работает, но это странно, потому что документация показывает неправильный порядок.

Priyank Panchal 14.05.2021 08:38

В моем 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);
    }
}

А в методе Configure я использовал вот так

        app.UseHttpsRedirection();

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

Другие вопросы по теме