【问题标题】:Using RestSharp to get header value from HttpResponseMessage in web API?使用 RestSharp 从 Web API 中的 HttpResponseMessage 获取标头值?
【发布时间】:2017-04-03 18:21:47
【问题描述】:

我在使用 RestSharp 从 HttpResponseMessage 获取令牌时遇到了一些问题。这是我的 API 控制器代码:

public HttpResponseMessage Create(long id)
{
    var token = _tokenCreator.CreateToken(id);
    var response = new HttpResponseMessage();
    response.Headers.Add("Token", token);
    response.StatusCode = HttpStatusCode.OK;

    return response;
}

这会像我想要的那样生成令牌,并创建下图所示的响应。当我使用 Postman 调用该方法时,这是我收到的响应的正文。如果我在发送请求的代码中查看响应的 Content 属性,这与我得到的结果相同。

Picture of response body.

那里显然有一个标题部分,但 RestSharp 在我的调用代码中没有识别它。

public string CreateToken(long id)
{
    var client = new RestClient(apiUrl);
    var request = new RestRequest(Method.GET)
    {
        Resource = "tokencreator/create"
    }
    request.AddQueryParameter("id", id.ToString());

    var response = client.Execute(request);
    var headers = response.Headers.ToList();

    // Here is what I want to do, but does not return a result
    var tokenHeader = headers.Find(x => x.Name == "Token");
    if(tokenHeader != null)
    {
        return tokenHeader.Value.ToString();
    }

    return "no token";
}

如果我循环并打印响应的标题,结果如下:

  • 传输编码分块
  • X-SourceFiles =?UTF-8?B?QzpccHJvamVjdHNcYXBpXEVudGl0bGVtZW50QWNjZXNzXHRva2VuY3JlYXRvclxjcmVhdGU=?=
  • 内容类型应用程序/json; charset=utf-8
  • 2017 年 4 月 3 日星期一 16:00:18 GMT
  • 服务器红隼
  • X-Powered-By ASP.NET

我在控制器中添加到响应的“令牌”标头不存在。是否有一种简单的方法可以访问响应正文中出现的“标题”部分?

编辑:附上 Postman 回复的“标题”部分的图片。没有“令牌”标题。知道为什么 response.Headers.Add("Token", token) 方法不添加标题,还是我完全误解了标题?

Picture of headers in Postman response.

【问题讨论】:

  • 您尚未发布邮递员的标题图片(带内容)。似乎在图片的 Header 部分中没有“Token”标头,有 6 个标头,响应标头的打印也列出了 6 个标头。我相信“令牌”标头没有被返回。
  • @dime2lo 我编辑了问题以包含图片。似乎“标头”仅添加到正文中,而不是请求的实际标头中。知道这是为什么吗?
  • @dime2lo 所以这是一个我必须工作的 hacky 解决方法。我将 Create 方法的返回类型更改为HttpResponse,并将标头添加到 ControllerBase 的 Response 属性中。然后手动设置状态码,它按预期工作。我在其他地方没有看到这种用法,但仍然想弄清楚发生了什么。

标签: c# asp.net asp.net-web-api restsharp


【解决方案1】:

所以我应该指定这是一个 .NET Core 应用程序。为了解决这个问题,我不得不去Startup.cs文件并将以下内容添加到ConfigureServices方法中:

services.AddMvc(); 更改为services.AddMvc().AddWebApiConventions();

您将需要 NuGet 包 Microsoft.AspNetCore.Mvc.WebApiCompatShim,它允许与旧的 Web Api 2 方式兼容。

【讨论】:

  • 如果我不在.Net核心应用程序中,我该怎么办,。我正在做 WEB API 2.0 开发。我也面临同样的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 2016-11-25
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多