邮递员发送标题并从httpresponsemessage获取

时间:2019-04-08 18:12:13

标签: c#

我正在尝试使用Postman调用我的网络api,并在Postman中传递一些标头值。然后在C#Web API中,我试图获取标头值。可能是由于缺乏知识/了解,我正在努力从HttpResponseMessage获取标头值。

我在Postman中用键和值设置了标题。 enter image description here

我有一个试图获取信息的代表

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内部完成的。似乎我试图尽快捕获请求,因此未包含标头信息。因此,我将请求捕获移到了委托外部,并移到了控制器中,在那里我有了传递的标头信息。

1 个答案:

答案 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")中进行设置。希望这会有所帮助。