質問

別のaspxページからHttpWebRequestオブジェクトを作成して、応答ストリームをデータストアに保存しています。 HttpWebRequestオブジェクトの作成に使用しているURLには、正しい出力をレンダリングするクエリ文字列が含まれています。古いブラウザを使用してページを参照すると、正しくレンダリングされます。 HttpWebResponse.GetResponseStream()を使用して出力ストリームを取得しようとすると、組み込みのエラーチェックがレンダリングされます。

ブラウザで正しくレンダリングするのに、HttpWebRequestオブジェクトとHttpWebResponseオブジェクトを使用しないのはなぜですか?

ソースコードは次のとおりです。

ターゲットページのコードビハインド:

protected void PageLoad(object sender, EventsArgs e)
{
   string output = string.Empty;

   if(Request.Querystring["a"] != null)
   {
      //generate output
      output = "The query string value is " + Request.QueryString["a"].ToString();
   }
   else
   {
      //generate message indicating the query string variable is missing
      output = "The query string value was not found";
   }

   Response.Write(output);
}

HttpWebRequestオブジェクトを作成するページのコードビハインド

string url = "http://www.mysite.com/mypage.aspx?a=1";
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url)

//this if statement was missing from original example
if(User.Length > 0)
{
    request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");
    request.PreAuthenticate = true;
}

request.UserAgent = Request.UserAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Stream resStream = response.GetResponseStream();  
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(resStream, encode, true, 2000);
int count = readStream.Read(read, 0, read.Length);
string str = Server.HtmlEncode(" ");

while (count > 0)
{
    // Dumps the 256 characters on a string and displays the string to the console.
    string strRead = new string(read, 0, count);
    str = str.Replace(str, str + Server.HtmlEncode(strRead.ToString()));
    count = readStream.Read(read, 0, 256);
}

// return what was found
result = str.ToString();

resStream.Close();
readStream.Close();

更新

@David McEwing-完全なページ名でHttpWebRequestを作成しています。ページはまだエラー出力を生成しています。ターゲットページのコードサンプルを更新して、私がやっていることを正確に示しました。

@Chris Lively-エラーページにリダイレクトしていません。クエリ文字列値が見つからなかったことを示すメッセージを生成します。ソースコードの例を更新しました。

更新1:

Fiddlerを使用してHttpWebRequestをトレースしようとしましたが、Webセッションの履歴ウィンドウに表示されませんでした。完全なWeb要求と応答を取得するために、ソースコードに何かが欠けていますか。

更新2:

この例では、次のコードセクションを含めませんでしたが、問題の原因でした。 HttpWebRequest Credentials プロパティを、問題を引き起こしているADアカウントではなく、サービスアカウントで設定していました。

ソースコードの例を更新しました

役に立ちましたか?

解決 3

次のコード行を置き換える必要があります:

request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");

with:

request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

他のヒント

使用しているWebサーバーは何ですか? IISで何かを行ったときに、 http://example.comの間でリダイレクトが発生する問題があったときに、過去のある時点で思い出すことができます。 / および http://example.com/default.asp はクエリ文字列を削除しました。

おそらく、Fiddler(またはプロトコルスニファー)を実行し、予期しない何かが起こっているかどうかを確認します。

また、完全なページ名の受け渡しが機能するかどうかも確認します。上記の場合、ほぼ確実に問題になります。

オプションで、 AllowAutoRedirectの使用を試みることができます。 HttpRequestObjectのプロパティ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top