172

現在、次のように「SendAsync」をオーバーライドするメッセージハンドラーがWebAPIサービスにあります。

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
  //implementation
}

このコード内で、という名前のカスタム追加されたリクエストヘッダー値を検査する必要がありますMyCustomID。問題は、私が次のことをするときです:

if (request.Headers.Contains("MyCustomID"))  //OK
    var id = request.Headers["MyCustomID"];  //build error - not OK

...次のエラーメッセージが表示されます。

タイプ'System.Net.Http.Headers.HttpRequestHeaders'の式に[]を使用したインデックス付けを適用することはできません

このオーバーライドされたメソッドに渡された(MSDNドキュメント)インスタンスを介して単一のカスタムリクエストヘッダーにアクセスするにはどうすればよいですか?HttpRequestMessage

4

12 に答える 12

283

次のようなことを試してください:

IEnumerable<string> headerValues = request.Headers.GetValues("MyCustomID");
var id = headerValues.FirstOrDefault();

ヘッダーへのアクセスが常に保証されていない場合に使用できる、ヘッダーのTryGetValuesメソッドもあります。

于 2013-02-19T21:14:06.347 に答える
44

throws exceptionキーが存在しない場合は以下の行。

IEnumerable<string> headerValues = request.Headers.GetValues("MyCustomID");

TryGetValues を使用した安全なソリューション:

System.Linq を含めます。

IEnumerable<string> headerValues;
var userId = string.Empty;

     if (request.Headers.TryGetValues("MyCustomID", out headerValues))
     {
         userId = headerValues.FirstOrDefault();
     }           
于 2014-09-03T09:01:05.067 に答える
3
request.Headers.FirstOrDefault( x => x.Key == "MyCustomID" ).Value.FirstOrDefault()

現代の変種:)

于 2017-06-02T06:42:11.137 に答える
0

別の方法

 string customHeader = string.Empty;
        if (Request.Headers.TryGetValue("x-date", out var xdateValue))
        {
            customHeader = xdateValue;
        };
于 2021-10-15T18:55:39.837 に答える
0
var token = string.Empty;
if (Request.Headers.TryGetValue("MyKey",  out headerValues))
{
    token = headerValues.FirstOrDefault();
}
于 2020-12-03T06:36:34.720 に答える