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

时间:2015-03-20 01:11:18

标签: asp.net-mvc asp.net-mvc-4 attributes custom-attributes

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

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

另外,有没有办法可以阻止控制器运行,具体取决于标头值?

1 个答案:

答案 0 :(得分:3)

您可以从AuthorizeAttribute派生,并根据标题中的值返回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;
  }
}