如何要求HTTPS但不重定向

问题描述 投票:1回答:1

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

然而Asp.net docs

警告

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

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

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

c# asp.net-core https asp.net-core-webapi
1个回答
2
投票

既然您正在使用asp.net核心,那么让我们编写一个ActionFilterAttribute,如果请求方案是HTTP而不是HTTPS,我们将要应用于任何我们想要返回Forbidden结果而不是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.
}

如需进一步阅读,请查看Filters in ASP.NET Core

© www.soinside.com 2019 - 2024. All rights reserved.