C# 在web API中使用RestSharp从HttpResponseMessage获取头值?

C# 在web API中使用RestSharp从HttpResponseMessage获取头值?,c#,asp.net,asp.net-web-api,restsharp,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); respon

我在使用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属性,就会得到相同的结果

这里显然有一个标题部分,但在我的调用代码中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?QZPCCHJVAVJDHNCYXBPXEVUDGL0BGVTZW50QWNJZXNZXHRVA2VUY3JLYXRVCLXJCMVHDGU==
  • 内容类型应用/json;字符集=utf-8
  • 日期2017年4月3日星期一格林尼治标准时间16:00:18
  • 侍者红隼
  • X-Powered-By ASP.NET
我在控制器中添加到响应的“Token”头不存在。有没有一种简单的方法可以访问响应主体中出现的“header”部分

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


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

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


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

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

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


您需要NuGet软件包Microsoft.AspNetCore.Mvc.WebApiCompatShim,该软件包允许与旧的Web Api 2路兼容。

您尚未发布邮递员提供的标题图片(包含内容)。看起来好像没有“Token”标题,在图片的标题部分有6个标题,响应标题的打印也列出了6个标题。我相信“Token”标题没有被返回。@dime2lo我编辑了这个问题以包含图片。看起来“头”只是添加到主体中,而不是请求的实际头。你知道为什么吗?@dime2lo所以这是一个我必须要做的黑客工作。我将Create方法的返回类型更改为
HttpResponse
,并将头添加到ControllerBase的Response属性中。然后手动设置状态代码,它将按预期工作。我在其他地方没有看到过这种用法,我仍然想知道发生了什么。你还没有发布你的邮递员的标题图片(包含内容)。看起来好像没有“Token”标题,在图片的标题部分有6个标题,响应标题的打印也列出了6个标题。我相信“Token”标题没有被返回。@dime2lo我编辑了这个问题以包含图片。看起来“头”只是添加到主体中,而不是请求的实际头。你知道为什么吗?@dime2lo所以这是一个我必须要做的黑客工作。我将Create方法的返回类型更改为
HttpResponse
,并将头添加到ControllerBase的Response属性中。然后手动设置状态代码,它将按预期工作。我还没有在其他地方看到过这种用法,我仍然想知道发生了什么。如果我不在.Net core应用程序中,我该怎么办,。我正在做WebAPI2.0开发。我也面临同样的问题?如果我不在.Net核心应用程序中,我该怎么办,。我正在做WebAPI2.0开发。我也面临同样的问题?