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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top