获取web api中的request-header
本文关键字:request-header 中的 api web 获取 | 更新日期: 2023-09-27 18:12:11
我试图用一个简单的键/值对设置一个头,并希望从我的API中读取这个。这是来自客户端的呼叫:
public async Task<T> Auth_GetAsync<T>(string path)
{
var client = BaseHttpClient;
var request = new HttpRequestMessage
{
RequestUri = new Uri(Path.Combine(client.BaseAddress.AbsoluteUri, path)),
Method = HttpMethod.Get,
Headers = { {"key", "param"} }
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(RequestHeader));
var task = await client.SendAsync(request);
return task.IsSuccessStatusCode
? JsonConvert.DeserializeObject<T>(await task.Content.ReadAsStringAsync())
: default(T);
}
当我试图在我的动作读取头,我得到它完全(与我的键/值对)
public async Task<IEnumerable<string>> GetAsync()
{
var i = Request.Headers;
return await Task.Run(() => new[] { "value1", "value2" });
}
当我试图这样做与ActionFilterAttribute和/或IAuthorizationFilter我的头总是包含其他键,但从不包含我的键/值对。这是我的属性:
public class RequiresKeyAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var req = filterContext.HttpContext.Request;
var auth = req.Headers["key"]; // this is null here
}
public void OnAuthorization(AuthorizationContext filterContext)
{
var i = filterContext.HttpContext.Request.Headers;
}
}
我的目标是,actionfilter检查是否在header中设置了键。我不总是想检查我的操作,如果键设置并验证它,…
我做错了什么吗?或者有解决办法吗?
也许你继承了错误的ActionFilterAttribute
来自MVC,而不是WebApi,因为WebApi使用HttpActionContext
,而不是ActionExecutingContext
如下:
public override void OnActionExecuting(HttpActionContext actionContext)
{
//code
}
你只是使用使用System.Web.Http.Filters.ActionFilterAttribute
从WebApi,它会很好。