【问题标题】:Postman send header and get from httpresponsemessage邮递员发送标头并从 httpresponsemessage 获取
【发布时间】:2019-04-10 23:59:14
【问题描述】:

我正在尝试使用 Postman 调用我的 web api,并在 Postman 中传递一些标头值。然后在 C# web api 中,我试图获取标头值。可能是由于缺乏知识/理解,我很难从 HttpResponseMessage 获取标头值。

我在 Postman 中设置了一个带有键和值的标题。

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

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 请求实际上包含我通过 Postman 传递的标头信息。似乎这取决于捕获它的过程中的哪个位置。就我而言,这是在 global.asax 中完成的。看来我正试图尽快捕获请求,因此不包含标头信息。因此,我将请求捕获移到了委托之外并移到了控制器中,在那里我有了传递的标头信息。

【问题讨论】:

  • 邮递员正在发出请求 - 您是通过 HttpClient 代理它吗?
  • @DanielA.White 不,它没有使用代理
  • 你到底想达到什么目的?您想在服务器端代码上检索请求标头吗?或者您想知道如何在邮递员中查看响应标头?或者您想知道如何在 C# 中编写代码来发送请求标头和读取响应标头?

标签: c#


【解决方案1】:

首先,HttpRequestMessage 存储有关查询参数的信息,即 url 中 ? 之后的所有内容。例如:http://foo.bar?name=dummy

其次,如果您要发送标头,您应该告诉您的方法执行模型绑定并使用[FromHeader]。理想情况下应该是这样的:

protected override async Task SendAsync([FromHeader] string appData)
{
   await DoCoolStuff(appData);
}

最后,我猜您在localhost 之后的网址中缺少端口号。它应该类似于localhost:5000。如果您瞄准特定端口,您可以通过添加.UseUrls("http://*5001") 在您的Startup.cs 中设置它。希望这会有所帮助。

【讨论】:

  • 欣赏 HttpRequestMessage 实际存储的信息。
  • @MicahMontoya 如果它有助于解决您的问题,您介意接受答案吗?
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 2021-08-26
  • 1970-01-01
  • 2016-12-02
  • 2016-05-12
  • 1970-01-01
  • 2016-05-27
  • 2021-10-26
相关资源
最近更新 更多