繁体   English   中英

如何要求HTTPS但不重定向

[英]how to require HTTPS but not redirect

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

但是, Asp.net文档指出

警告

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

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

有没有办法在控制器/方法级别拒绝但不重定向传入的https?

由于您使用的是asp.net核心,因此让我们编写一个ActionFilterAttribute ,如果请求方案是HTTP而不是HTTPS ,我们将其应用于要返回禁止结果而不是Redirect的任何控制器或操作

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中检出筛选器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM