2

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

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

谢谢你,斯蒂芬

4

1 回答 1

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 标头

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

public static NameValueCollection GetHeaders(this IHttpResponse) 
{
  var aspNetResponseHeaders = httpReq.OriginalResponse as HttpResponse;
  return aspNetResponseHeaders != null 
     ? aspNetResponseHeaders.Headers
     : ((HttpListenerResponse)httpReq.OriginalResponse).Headers; //Http Listener
}
于 2013-04-10T19:11:07.233 回答