0

我正在从另一个 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 Sessions 历史记录窗口中。我是否在源代码中遗漏了某些内容以获得完整的 Web 请求和响应。

更新 2:

我的示例中没有包含以下代码部分,这是导致问题的罪魁祸首。我正在使用服务帐户而不是导致问题的 AD 帐户设置Credentials属性。HttpWebRequest

我更新了我的源代码示例

4

3 回答 3

2

你用的是什么网络服务器?我记得在过去使用 IIS 做某事时,有一个问题是http://example.com/http://example.com/default.asp之间的重定向丢弃了查询字符串。

也许运行 Fiddler(或协议嗅探器)并查看是否发生了您未预料到的事情。

还要检查传递完整页面名称是否有效。如果确实如此,则几乎可以肯定是问题所在。

于 2009-05-05T00:18:29.083 回答
0

或者,您可以尝试使用 HttpRequestObject 的AllowAutoRedirect属性。

于 2009-05-05T01:15:37.980 回答
0

我需要替换以下代码行:

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

和:

request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
于 2009-05-05T20:41:28.627 回答