代码之家  ›  专栏  ›  技术社区  ›  Luke Hammer

如何要求HTTPS但不重定向

  •  1
  • Luke Hammer  · 技术社区  · 6 年前

    我有一个ASP.net具有API部分的核心应用程序。我想要求对API的所有访问都使用Https。

    然而 Asp.net docs

    警告

    不要在接收敏感信息的Web API上使用RequireAttribute 信息。RequireAttribute使用HTTP状态代码重定向 从HTTP重定向到HTTPS。这些客户可以通过

    • 不在HTTP上侦听。
    • 关闭状态代码为400(BadRequest)的连接,不提供请求。

    问题

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Timothy Macharia astallaslions    6 年前

    既然你用的是asp.net核心,让我们写一个 ActionFilterAttribute 我们将应用于任何我们想要返回 被禁止的 重定向 如果请求方案是 而不是 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.
    }
    

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