我正在尝试使用Postman调用我的网络api,并在Postman中传递一些标头值。然后在C#Web API中,我试图获取标头值。可能是由于缺乏知识/了解,我正在努力从HttpResponseMessage获取标头值。
我有一个试图获取信息的代表
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
IEnumerable<string> keys = null;
if (!request.Headers.TryGetValues("AppData", out keys))
return null;
var item = keys.First();
.....
}
当我调试并中断IEnumerable时,请求中没有我在标头中设置的值。我可能会缺少什么?
我的解决方法。
我能够做到这一点。这是我发现并做的。 HttpRequestMessage请求实际上包含我通过邮递员传递的标头信息。似乎取决于捕获过程中的位置。就我而言,这是从global.asax内部完成的。似乎我试图尽快捕获请求,因此未包含标头信息。因此,我将请求捕获移到了委托外部,并移到了控制器中,在那里我有了传递的标头信息。
答案 0 :(得分:0)
首先,HttpRequestMessage
在URL中存储有关查询参数的信息,即?
之后的所有内容。例如:http://foo.bar?name=dummy
。
第二,如果要发送标头,则应告诉方法执行模型绑定并使用[FromHeader]
。理想情况是这样的:
protected override async Task SendAsync([FromHeader] string appData)
{
await DoCoolStuff(appData);
}
最后,我想您可能是localhost
之后的网址中缺少端口号。它应该类似于localhost:5000
。如果您要瞄准特定端口,则可以通过添加Startup.cs
在.UseUrls("http://*5001")
中进行设置。希望这会有所帮助。