如何要求HTTPS但不重定向

时间:2018-09-07 21:02:12

标签: c# asp.net-core https asp.net-core-webapi

我有一个带有API部分的ASP.net Core应用程序。我想所有访问API都需要Https。

但是Asp.net docs声明

  

警告

     

请勿在接收敏感消息的Web API上使用RequireHttpsAttribute   信息。 RequireHttpsAttribute使用HTTP状态代码重定向   浏览器从HTTP到HTTPS。 API客户端可能不理解或服从   从HTTP重定向到HTTPS。这样的客户可以通过   HTTP。 Web API应该:

     
      
  • 不监听HTTP。
  •   
  • 关闭状态码为400(BadRequest)的连接,但不处理请求。
  •   

问题

是否可以在控制器/方法级别拒绝但不能重定向传入的https?

1 个答案:

答案 0 :(得分:2)

由于您使用的是asp.net核心,因此我们编写一个Processor并将其应用于要返回 Forbidden 结果而不是重定向(如果请求方案是 HTTP 而不是 HTTPS

ActionFilterAttribute

使用方法

这是在控制器上使用动作过滤器的方法:

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);
        }
    }
}

要进一步阅读,请结帐Filters in ASP.NET Core