获取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中设置了键。我不总是想检查我的操作,如果键设置并验证它,…

我做错了什么吗?或者有解决办法吗?

获取web api中的request-header

也许你继承了错误的ActionFilterAttribute来自MVC,而不是WebApi,因为WebApi使用HttpActionContext,而不是ActionExecutingContext如下:

public override void OnActionExecuting(HttpActionContext actionContext)
{
    //code
}

你只是使用使用System.Web.Http.Filters.ActionFilterAttribute从WebApi,它会很好。