我有一个带有API部分的ASP.net Core应用程序。我想所有访问API都需要Https。
但是Asp.net docs声明
警告
请勿在接收敏感消息的Web API上使用RequireHttpsAttribute 信息。 RequireHttpsAttribute使用HTTP状态代码重定向 浏览器从HTTP到HTTPS。 API客户端可能不理解或服从 从HTTP重定向到HTTPS。这样的客户可以通过 HTTP。 Web API应该:
- 不监听HTTP。
- 关闭状态码为400(BadRequest)的连接,但不处理请求。
问题
是否可以在控制器/方法级别拒绝但不能重定向传入的https?
答案 0 :(得分:2)
由于您使用的是asp.net核心,因此我们编写一个Processor
并将其应用于要返回 Forbidden 结果而不是重定向(如果请求方案是 HTTP 而不是 HTTPS
ActionFilterAttribute
使用方法
这是在控制器上使用动作过滤器的方法:
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);
}
}
}
要进一步阅读,请结帐Filters in ASP.NET Core