我正在尝试记录我的Web API项目的HTTP响应头。
该项目采用VS2012、.NET 4.5和ASP.NET MVC4进行开发。
我已经编写了一个DelegatingHandler
子类,如下所示:
public class LoggingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// Execute the request
return base.SendAsync(request, cancellationToken).ContinueWith(task =>
{
var response = task.Result;
return response;
});
}
}
然而,问题是,我不能从response
获取头文件的值。response.Headers
是一个空集合,response.Content.Headers
只包含一个名为Content-Type
的键,而HttpContext.Current
为null
。
我见过WebAPIContrib的代码,它们使用相同的逻辑来记录头,但它们的代码似乎也不起作用。
那么我应该如何跟踪Web API项目中的HTTP响应头呢?
发布于 2017-02-24 07:19:58
试试下面的代码。
return base.SendAsync(request, cancellationToken).ContinueWith(
task =>
{
var headers = task.Result.ToString();
var body = task.Result.Content.ReadAsStringAsync().Result;
// RETURN THE ORIGINAL RESULT
var response = task.Result;
return response;
}
);
发布于 2017-02-21 16:56:53
你必须找对地方:
request.Content.Headers.ContentType
假设有一个Content-Type: application/json
请求头,那么前面提到的将返回"application/json"
。
因此,基本上,一些标题与内容相关联,这就是您应该从中读取它们的地方。
响应头也是如此。根据它们的类型,您可能需要从响应内容中提取它们(对于返回正文的请求)
response.Content.Headers.ContentType
https://stackoverflow.com/questions/18373835
复制相似问题