2

ロギング目的で応答ヘッダーを取得できるようにしたいのですが、Interface に 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 応答オブジェクトからそれらにアクセスする必要があります。独自の Extension メソッドで簡単にラップできますが、たとえば次のようになります。

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 に答える