使用RestSharp从Web API中的HttpResponseMessage获取标头值?

时间:2017-04-03 18:21:48

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

我在使用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 =?=
  • Content-Type application / json;字符集= UTF-8
  • Date Mon,03 Apr 2017 16:00:18 GMT
  • 服务器Kestrel
  • X-Powered-By ASP.NET

"令牌"我在控制器中添加的标题响应不存在。有没有一种简单的方法可以访问"标题"出现在回复正文中的部分?

编辑:附上"标题"的图片邮递员的答复部分。没有"令牌"头。知道为什么response.Headers.Add("Token", token)方法没有添加标题,或者我是否完全误解了标题?

Picture of headers in Postman response.

1 个答案:

答案 0 :(得分:0)

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

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

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