如何要求 HTTPS 但不重定向

有一个带有 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?


杨__羊羊
浏览 324回答 1
1回答

aluckdog

由于您使用的是 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.}
打开App,查看更多内容
随时随地看视频慕课网APP