簡潔で技術的な回答が必要な場合は、回答の最後のセクションに進んでください。
もっと詳しく知りたい場合は、すべて読んでください。楽しんでいただければ幸いです...
今日もこの問題に対処しましたが、今日発見したことは次のとおりです。
上記の答えは次のように当てはまります。
1.1 追加しようとしているヘッダーが既に存在するため、再度追加するのではなく、適切なプロパティ (たとえば、インデクサー) を使用してその値を変更する必要があることを示しています。
1.2 のヘッダーを変更するときはいつでもHttpWebRequest
、オブジェクト自体に適切なプロパティが存在する場合は、それらを使用する必要があります。
主要なガイドラインを提供してくれた FOR と Jvenema に感謝します...
しかし、私が見つけたのは、それがパズルの欠けているピースだったということです:
2.1WebHeaderCollection
クラスは通常、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
クラスから適切なプロパティを明示的に使用してそれらの値を変更することです。
編集:(便利、コメントから、ユーザーKaidoによるコメント)
WebHeaderCollection.IsRestricted(key)
解決策は、 add を呼び出す前に、ヘッダーが既に存在するか、制限されているか ( ) を確認することです。