如何从IHttpResponse获取响应标头

时间:2013-04-10 18:52:39

标签: asp.net servicestack

我希望能够检索响应标头以进行日志记录,但确实在接口上看到了Headers属性,但我确实看到了OriginalResponse。我们应该投这个并使用吗?这会包含SS可能注入的任何标头吗?我对此接口的使用是在全局过滤器中定义为

ResponseFilters.Add((httpReq, httpResp, responseDto) =>
{
    // Log portions of the response i.e. Headers
});

谢谢你, 斯蒂芬

1 个答案:

答案 0 :(得分:3)

httpReq.Headers 与您从ASP.NET HttpRequest.Headers或自托管HttpListenerRequest.Headers获得的实例完全相同。

所以它与完全相同与手动转换底层请求并直接访问它,例如:

HttpRequest标头

对于ASP.NET

var aspNetRequestHeaders = ((HttpRequest)httpReq.OriginalRequest).Headers;

对于HttpListener:

var httpListenerHeaders = ((HttpListenerRequest)httpReq.OriginalRequest).Headers;

HttpResponse Headers

IHttpResponse目前没有公开Headers集合,因此您需要使用类似的方法从底层HTTP Response对象访问它们。虽然您可以轻松地将它们包装在您自己的Extension方法中,例如:

public static NameValueCollection GetHeaders(this IHttpResponse) 
{
  var aspNetResponseHeaders = httpReq.OriginalResponse as HttpResponse;
  return aspNetResponseHeaders != null 
     ? aspNetResponseHeaders.Headers
     : ((HttpListenerResponse)httpReq.OriginalResponse).Headers; //Http Listener
}