как требовать HTTPS, но не перенаправлять - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть приложение ASP.net Core с разделом API. Я хочу Требовать Https для всего доступа к API.

Однако Документы Asp.net Состояния

Внимание

Не используйте RequireHttpsAttribute в веб-API, которые получают конфиденциальные Информация. RequireHttpsAttribute использует HTTP-коды состояния для перенаправления браузеры от HTTP до HTTPS. Клиенты API могут не понимать или подчиняться перенаправляет с HTTP на HTTPS. Такие клиенты могут отправлять информацию более HTTP. Веб-API должны:

  • Не слушать по HTTP.
  • Закрыть соединение с кодом состояния 400 (BadRequest) и не обслуживать запрос.

Вопрос

Есть ли способ отклонить, но не перенаправить входящий https на уровне контроллера / метода?

1 Ответ

0 голосов
/ 08 сентября 2018

Так как вы используете ядро ​​asp.net, давайте напишем ActionFilterAttribute, который мы собираемся применить к любым контроллерам или действиям, которые мы хотим, чтобы результат Forbidden вместо Redirect если схема запроса HTTP , а не HTTPS

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class RestrictHttpsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.HttpContext.Request.IsHttps)
        {
            context.Result = new ForbidResult();
        }
        else
        {
            base.OnActionExecuting(context);
        }
    }
}

Как использовать

Как использовать фильтр действий на контроллере:

[RestrictHttps]
public class ExampleController : Controller
{
    // controller code goes here.
}

Для дальнейшего чтения, извлеките Фильтры в ASP.NET Core

...