[英]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.