为了账号安全,请及时绑定邮箱和手机立即绑定

如何要求 HTTPS 但不重定向

如何要求 HTTPS 但不重定向

C#
杨__羊羊 2022-01-09 10:28:03
有一个带有 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?
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

由于您使用的是 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.

}


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信