如何在使用属性进入控制器之前检查 HTTP header 值?

How to check the HTTP header value before entering a controller using an attribute?

我正在尝试检查 http header 是否包含特定值,然后对其执行一些操作。我可以为此编写一个方法,但我想知道我是否可以使用属性来做到这一点。类似于:

[CheckHeader("SomeValue")]
public IHttpActionResult MyController()
{
    //do stuff
}

此外,有什么方法可以根据 header 值阻止控制器 运行 吗?

您可以根据 header

中的值从 AuthorizeAttribute 和 return truefalse 派生
public class CheckHeader: AuthorizeAttribute
{
  private readonly string _Value;
  public CheckHeader(string value)
  {
    _Value = value;
  }
  protected override bool AuthorizeCore(HttpContextBase httpContext)
  {
    // Get the headers
    var headers = httpContext.Request.Headers;
    // Do some checks (not sure what your wanting to do)
    if (headers["SomeHeader"] == _Value)
    {
      return true;
    }
    return false;
  }
}