使用 RestSharp 从 Web API 中的 HttpResponseMessage 获取 header 值?
Using RestSharp to get header value from HttpResponseMessage in web API?
我在使用 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 调用该方法时,这是我收到的响应的 body。这与我在发送请求的代码中查看响应的内容 属性 时得到的结果相同。
Picture of response body.
那里显然有一个 header 部分,但它在我的调用代码中没有被 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";
}
如果我遍历并打印响应的 header,结果如下:
- Transfer-Encoding 分块
- X-SourceFiles =?UTF-8?B?QzpccHJvamVjdHNcYXBpXEVudGl0bGVtZW50QWNjZXNzXHRva2VuY3JlYXRvclxjcmVhdGU=?=
- Content-Typeapplication/json;字符集=utf-8
- 日期 2017 年 4 月 3 日星期一 16:00:18 GMT
- 服务器红隼
- X-Powered-By ASP.NET
"Token" header 我在controller中添加到response中没有。是否有一种简单的方法来访问出现在响应的 body 中的 "header" 部分?
编辑:附上 Postman 回复的 "Headers" 部分的图片。没有"Token"header。知道为什么 response.Headers.Add("Token", token)
方法不添加 header,还是我完全误解了 header?
Picture of headers in Postman response.
所以我应该指定这是一个 .NET Core 应用程序。要解决这个问题,我必须转到 Startup.cs
文件并将以下内容添加到 ConfigureServices
方法中:
将services.AddMvc();
更改为services.AddMvc().AddWebApiConventions();
您将需要 NuGet 包 Microsoft.AspNetCore.Mvc.WebApiCompatShim,它允许与旧 Web Api 2 方式兼容。
我在使用 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 调用该方法时,这是我收到的响应的 body。这与我在发送请求的代码中查看响应的内容 属性 时得到的结果相同。
Picture of response body.
那里显然有一个 header 部分,但它在我的调用代码中没有被 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";
}
如果我遍历并打印响应的 header,结果如下:
- Transfer-Encoding 分块
- X-SourceFiles =?UTF-8?B?QzpccHJvamVjdHNcYXBpXEVudGl0bGVtZW50QWNjZXNzXHRva2VuY3JlYXRvclxjcmVhdGU=?=
- Content-Typeapplication/json;字符集=utf-8
- 日期 2017 年 4 月 3 日星期一 16:00:18 GMT
- 服务器红隼
- X-Powered-By ASP.NET
"Token" header 我在controller中添加到response中没有。是否有一种简单的方法来访问出现在响应的 body 中的 "header" 部分?
编辑:附上 Postman 回复的 "Headers" 部分的图片。没有"Token"header。知道为什么 response.Headers.Add("Token", token)
方法不添加 header,还是我完全误解了 header?
Picture of headers in Postman response.
所以我应该指定这是一个 .NET Core 应用程序。要解决这个问题,我必须转到 Startup.cs
文件并将以下内容添加到 ConfigureServices
方法中:
将services.AddMvc();
更改为services.AddMvc().AddWebApiConventions();
您将需要 NuGet 包 Microsoft.AspNetCore.Mvc.WebApiCompatShim,它允许与旧 Web Api 2 方式兼容。