【发布时间】:2014-07-07 06:25:24
【问题描述】:
我的目标是为每个传出的 JSON 响应添加某些自定义标头。为此,创建了一个从 SetDefaultContentHeaders JsonMediaTypeFormatter 扩展的类,并像这样覆盖 SetDefaultContentHeaders 方法:
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.Add("X-Answer", "42");
headers.Add("X-Question", "Unknown");
}
然后我将派生的媒体类型格式化程序添加到格式化程序列表中:
config.Formatters.Insert(0, new MyMediaTypeFormatter());
而且这个解决方案似乎适用于某些请求,但不适用于其他请求。经过一番调查,我发现如果我在请求中包含“接受”标头,则响应中不包含我的自定义标头!这有点令人惊讶,因为响应类型仍然返回 application/json,表明我的格式化程序或默认的 json 格式化程序正在处理响应。我唯一能想到的是调用SetDefaultContentHeaders 的代码在JsonMediaTypeFormatter,而SetDefaultContentHeaders 不是虚拟的。
那么 - 这里发生了什么?纠正这个问题的最佳方法是什么?
【问题讨论】:
标签: c# asp.net asp.net-web-api mediatypeformatter