我想使用属性来确保我的请求中存在某些标头。这不是一个授权属性。其中一个用例是当收到请求时,我想确保旧客户端的X-Request-For标头已被正确处理。还有其他用例,但所有用例都围绕着读取特定的HTTP标头值并在控制器接管之前采取适当的操作。
[MyAttribute(HeaderOptions.RequestFor)
[httpPost]
public MyMethod(string data)
{
...
}
我想使用属性来确保我的请求中存在某些标头。这不是一个授权属性。其中一个用例是当收到请求时,我想确保旧客户端的X-Request-For标头已被正确处理。还有其他用例,但所有用例都围绕着读取特定的HTTP标头值并在控制器接管之前采取适当的操作。
[MyAttribute(HeaderOptions.RequestFor)
[httpPost]
public MyMethod(string data)
{
...
}
public class CheckHeaderFilter : Attribute, IResourceFilter
{
private readonly string[] _headers;
public CheckHeaderFilter(params string[] headers)
{
_headers = headers;
}
public void OnResourceExecuting(ResourceExecutingContext context)
{
if (_headers == null) return;
if (!_headers.All(h => context.HttpContext.Request.Headers.ContainsKey(h)))
{
//do whatever you need to do when check fails
throw new Exception("Necessary HTTP headers not present!");
}
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
}
}
[CheckHeaderFilter(HeaderOptions.RequestFor)]
public IActionResult Index()
{
...
}