1. ホーム
  2. .net

[解決済み】この動詞型ではcontent-bodyを送信できない

2022-02-15 04:55:54

質問

私の.NET 2.0アプリ(Windows Mobile 6標準エミュレータ上で動作)で、この例外(ProtocolViolationException)が発生しました。 私が知っている限りでは、コンテンツ・ボディを追加していないのですが、何かの拍子に追加してしまったのでしょうか? 私のコードは以下の通りです(非常にシンプルです)。 .NETにこれが単なるhttp GETであることを納得させるために、他に何か必要なことはありますか?

//run get and grab response
WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
Stream stream = request.GetRequestStream();           // <= explodes here
XmlTextReader reader = new XmlTextReader(stream);

解決方法は?

簡単に言うと、リクエストストリームを取得しないでください。GET リクエストは 通常 はボディを持つ(たとえ HTTPで技術的に禁止されているわけではない ) と WebRequest はそれをサポートしていません。 GetRequestStream は、リクエストのためのボディデータを提供するためのものです。

をしようとしていることを考えると 読む をストリームから取得したいように見えますが、実際には 応答 を作成し、そこからレスポンスストリームを読み取ります。

WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
    using (Stream stream = response.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(stream);
        ...
    }
}