オブジェクトに HTTP ヘッダーのキー/値のペアを追加しようとするとWebRequest
、次の例外が発生します。
このヘッダーは適切なプロパティを使用して変更する必要があります
Add() メソッドを使用してコレクションに新しい値を追加しようとしましたHeaders
が、同じ例外が発生します。
webRequest.Headers.Add(HttpRequestHeader.Referer, "http://stackoverflow.com");
WebRequest オブジェクトを HttpWebRequest にキャストし、 などのプロパティを設定することでこれを回避できますhttpWebReq.Referer ="http://stackoverflow.com"
が、これはプロパティを介して公開される少数のヘッダーに対してのみ機能します。
リモート リソースのリクエストでヘッダーを変更する際に、よりきめ細かく制御する方法があるかどうかを知りたいです。
ベストアンサー1
短く技術的な回答が必要な場合は、回答の最後のセクションに進んでください。
もっと詳しく知りたい方は、全部読んでみてください。楽しんでいただけると嬉しいです...
私も今日この問題に対処しましたが、今日発見したのは次のことです。
上記の答えは、次のとおりです。
1.1 追加しようとしているヘッダーがすでに存在しているため、再度追加するのではなく、適切なプロパティ (インデクサーなど) を使用してその値を変更する必要があることを示しています。
1.2 のヘッダーを変更するときは常に
HttpWebRequest
、オブジェクト自体に適切なプロパティが存在する場合はそれを使用する必要があります。
先導的なガイドラインを提供してくれたFORとJvenemaに感謝します...
しかし、私が発見したことは、それはパズルの欠けているピースだったそれは:
2.1
WebHeaderCollection
クラスは通常、WebRequest
.Headers またはWebResponse
.Headers を通じてアクセスされます。一部の一般的なヘッダーは制限されていると見なされ、API によって直接公開されるか (Content-Type など)、システムによって保護されており、変更できません。
制限されるヘッダーは次のとおりです。
Accept
Connection
Content-Length
Content-Type
Date
Expect
Host
If-Modified-Since
Range
Referer
Transfer-Encoding
User-Agent
Proxy-Connection
したがって、次回この例外が発生し、解決方法がわからない場合は、制限されたヘッダーがいくつかあることを思い出してください。解決策は、WebRequest
/HttpWebRequest
クラスから適切なプロパティを明示的に使用して、それらの値を変更することです。
編集: (役に立つ、コメントから、ユーザーによるコメントカイドウ)
WebHeaderCollection.IsRestricted(key)
解決策は、addを呼び出す前に、ヘッダーがすでに存在するか制限されているか()を確認することです。