Ⅰ. はじめに
通常HttpClientでHTTPヘッダを指定する場合は以下のように書くことが出来ます。
var client = new HttpClient(); client.DefaultRequestHeaders.Add("User-Agent", "hoge");
しかし、User-AgnetやAuthorization等のよく知られたヘッダは自動的にパース、検証が行われ*1、誤った値を指定するとSystem.FormatExceptionが発生します。
static void Main(string[] args) { var client = new HttpClient(); client.DefaultRequestHeaders.Add("User-Agent", "foo=bar"); var statusCode = client.GetAsync("http://example.com").Result.StatusCode; Console.WriteLine(statusCode); }
実行結果
Unhandled Exception: System.FormatException: The format of value 'foo=bar' is invalid.
Ⅱ. 検証を回避する方法
Add の代わりに TryAddWithoutValidation*2 を使います。
static void Main(string[] args) { var client = new HttpClient(); client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "foo=bar"); var statusCode = client.GetAsync("http://example.com").Result.StatusCode; Console.WriteLine(statusCode); }
実行結果
OK