문제

다른 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- 오류 페이지로 리디렉션하지 않고 쿼리 문자열 값을 찾을 수 없다는 메시지를 생성합니다. 소스 코드 예제를 업데이트했습니다.

Update 1:

나는 httpwebrequest를 추적하기 위해 Fiddler를 사용해 보았고 웹 세션 히스토리 창에는 표시되지 않았습니다. 전체 웹 요청과 응답을 얻기 위해 소스 코드에 무언가가 놓쳤습니까?

Update 2:

내 예에 다음 코드 섹션을 포함하지 않았으며 문제를 일으키는 범인이었습니다. 나는 Credentials 의 속성 HttpWebRequest 내 광고 계정 대신 SEVICE 계정으로 문제를 일으킨다.

소스 코드 예제를 업데이트했습니다

도움이 되었습니까?

해결책 3

다음 코드 줄을 교체해야합니다.

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

와 함께:

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

다른 팁

어떤 웹 서버를 사용하고 있습니까? IIS로 무언가를 할 때 과거의 어느 시점에서 기억할 수 있습니다. http://example.com/ 그리고 http://example.com/default.asp 쿼리 문자열을 떨어 뜨 렸습니다.

아마도 피들러 (또는 프로토콜 스나이퍼)를 실행하고 기대하지 않는 일이 있는지 확인하십시오.

또한 전체 페이지 이름을 전달하는 것이 작동하는지 확인하십시오. 그것이하는 경우 위의 것이 거의 확실히 문제입니다.

선택적으로, 당신은 그것을 사용하려고 시도 할 수 있습니다 허용 httprequestobject의 속성.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top