我正在从另一个 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
我更新了我的源代码示例