首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >DelegatingHandler中没有响应头

DelegatingHandler中没有响应头
EN

Stack Overflow用户
提问于 2013-08-22 15:07:54
回答 2查看 1.8K关注 0票数 17

我正在尝试记录我的Web API项目的HTTP响应头。

该项目采用VS2012、.NET 4.5和ASP.NET MVC4进行开发。

我已经编写了一个DelegatingHandler子类,如下所示:

代码语言:javascript
复制
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.Currentnull

我见过WebAPIContrib的代码,它们使用相同的逻辑来记录头,但它们的代码似乎也不起作用。

那么我应该如何跟踪Web API项目中的HTTP响应头呢?

EN

回答 2

Stack Overflow用户

发布于 2017-02-24 07:19:58

试试下面的代码。

代码语言:javascript
复制
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;
                        }
            );
票数 2
EN

Stack Overflow用户

发布于 2017-02-21 16:56:53

你必须找对地方:

代码语言:javascript
复制
request.Content.Headers.ContentType

假设有一个Content-Type: application/json请求头,那么前面提到的将返回"application/json"

因此,基本上,一些标题与内容相关联,这就是您应该从中读取它们的地方。

响应头也是如此。根据它们的类型,您可能需要从响应内容中提取它们(对于返回正文的请求)

代码语言:javascript
复制
response.Content.Headers.ContentType
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18373835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档