Não gerando uma resposta completa de um objeto HTTPWEBRESPONHE em C#
-
03-07-2019 - |
Pergunta
Estou criando um objeto httpwebrequest de outra página ASPX para salvar o fluxo de resposta no meu armazenamento de dados. O URL que estou usando para criar o objeto httpwebrequest possui consultas para renderizar a saída correta. Quando eu navego para a página usando qualquer navegador antigo, ela renderiza corretamente. Quando tento recuperar o fluxo de saída usando o httpwebroponse.getResponsestream (), ele renderiza minha verificação de erro incorporada.
Por que renderizaria corretamente no navegador, mas não usando os objetos HttpWebRequest e HttpwebroSponse?
Aqui está o código -fonte:
Código atrás da página de destino:
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);
}
Código atrás da página criando objeto 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();
Atualizar
@David MCEWING - Estou criando o httpwebrequest com o nome completo da página. A página ainda está gerando a saída de erro. Atualizei a amostra de código da página de destino para demonstrar exatamente o que estou fazendo.
@Chris Lively - não estou redirecionando para uma página de erro, gero uma mensagem indicando que o valor da sequência de consulta não foi encontrado. Eu atualizei o exemplo do código -fonte.
Atualização 1:
Tentei usar o Fiddler para rastrear o httpwebrequest e ele não apareceu na janela História da Web Sessions. Estou perdendo algo no meu código -fonte para obter uma solicitação e resposta completas da Web.
Atualização 2:
Não incluí a seção a seguir do código no meu exemplo e foi culpado causando o problema. Eu estava definindo o Credentials
propriedade do HttpWebRequest
com uma conta de sevice em vez da minha conta de anúncio, que estava causando o problema.
Eu atualizei meu exemplo de código -fonte
Solução 3
Eu preciso substituir a seguinte linha de código:
request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");
com:
request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
Outras dicas
Qual servidor da web você está usando? Lembro -me de um ponto do meu passado ao fazer algo com o IIS, houve um problema em que o redirecionamento entre http://example.com/ e http://example.com/default.asp derrubou a sequência de consulta.
Talvez Run Fiddler (ou um protocolo Sniffer) e veja se há algo acontecendo que você não está esperando.
Verifique também se a aprovação no nome da página inteira funciona. Se isso fizer o exposto, é quase certamente o problema.
Opcionalmente, você pode tentar usar o AllowauterirEct Propriedade do HttPrequestObject.