#asp.net-core #ssl #redirect #iis #.net-core
#asp.net-core #ssl #перенаправление #iis #.net-core
Вопрос:
Мое приложение .net Core 2.1 работает отлично. Теперь я хочу перенаправить http на https в рабочей среде. Итак, в IIS 8.5 я создал правила.
<rewrite>
<rules>
<rule name="HTTPS force" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
</conditions>
<action type="Redirect" url="https://{C:1}:5001/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Одним из методов является
[HttpGet]
[Route("user")]
public async Task<IActionResult> GetUser(string name)
{
var result = await _database.UserTable.Where(u => u.Name == name).FirstOrDefaultAsync();
return Json(result);
}
Дело в том, что метод вообще не вызывается. Однако, если я удалю правила в web.config и использую чистый C #-код .net core для перенаправления http на https, например,
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
options.HttpsPort = 5001;
});
Тогда метод может быть достигнут. Я не знаю, почему?
В моем Startup.cs
файле
public void ConfigureServices(IServiceCollection services)
{
services.TryAddTransient<IHttpContextAccessor, HttpContextAccessor>();
}
Означает ли это, что если мы хотим перенаправить http на https, то мы не можем установить конфигурацию в IIS? Мы ДОЛЖНЫ сделать это в коде?
Комментарии:
1. При обычных обстоятельствах вы можете использовать перезапись URL для перенаправления http на https. Должна быть проблема с вашим правилом URL. Вы можете использовать трассировку неудачных запросов для проверки проблемы.
2. Журнал отслеживания не создан, поэтому я все еще сомневаюсь, что существует возможный конфликт между правилом маршрутизации и .net core. Возможно, команды Microsoft этого не знают.
3. Я имею в виду, что вы используете отслеживание неудачных запросов для получения журнала, а затем обнаруживаете проблему на основе содержимого журнала.
4. @samwu, я имел в виду, что папка отслеживания неудачных запросов пуста. Итак, нет подсказки.
5. Пожалуйста, убедитесь, что вы включили отслеживание неудачных запросов, а затем протестируйте свое правило URL. наконец, проверьте сообщение об ошибке в журнале.
Ответ №1:
Я пробую это правило в iis:
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
}
Комментарии:
1. Спасибо, можете ли вы также показать свой код .net Core? Весь код Startup.cs
2. Я только создал пустой проект .net Core и опубликовал его в iis. Я не добавлял никакого кода, код в Startup.cs используется по умолчанию.
3. Хорошо, но не могли бы вы вставить код по умолчанию? Спасибо.
4. Я опубликовал код запуска класса в своем ответе выше.
5. Я предполагаю, что я пропустил
app.UseRouting();
в своем коде, и я предполагаю, что это для перенаправления.