2012-09-28 6 views
2

프록시 파일을 사용하여 시스템에서 아약스를 사용하여 시스템의 다른 하위 도메인에서 페이지를로드 할 수 있습니다. 나는 첫 번째 시도에서 이것을 성공적으로했지만, 두 번째 시도는 나에게 오류를주고있다. 나는 왜 그런 도움을 얻을 수 있는지 고민 중이다.원격 서버에서 오류를 반환했습니다 : (404) 찾을 수 없음 - HttpWebResponse

protected void Page_Load(object sender, EventArgs e) 
{ 
    string proxyURL = HttpUtility.UrlDecode(Request.QueryString["u"]); 

    if (proxyURL != string.Empty) 
    { 
     HttpWebRequest request = (HttpWebRequest) WebRequest.Create(proxyURL); 
     request.Method = "POST"; 
     request.ContentLength = 0; 
     HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

     if (response.StatusCode.ToString().ToLower() == "ok") 
     { 
      string contentType = response.ContentType; 
      Stream content = response.GetResponseStream(); 
      if (content != null) 
      { 
       StreamReader contentReader = new StreamReader(content); 
       Response.ContentType = contentType; 
       Response.Write(contentReader.ReadToEnd()); 
      } 
     } 
    } 
} 

내 HTML은/자바 스크립트가 바로 이것이다 :

첫째이 내 Proxy.aspx.cs입니다

다음
<script> 
    $(document).ready(function() { 
     $.ajax({ 
      type: "POST", 
      url: "Proxy.aspx?u=<%=GetUrl()%>", 
      success: function (data) { 
       $('#iFrameHolder').html(data); 
      } 
     }); 
    }); 
</script> 

<div id="iFrameHolder"></div> 

나는 단지의 URL을 구축하기 위해의 getURL() 함수를 사용하여 하위 도메인의 프로젝트에서 필요한 모든 페이지

나는이 하나 개의 URL에 전혀 문제가 작동하지 얻었으나, 두 번째 시도에 대해이 오류 접수 :

System.Net.WebException: The remote server returned an error: (404) Not Found.  
at System.Net.HttpWebRequest.GetResponse()  
at G2F.Collective.WebApplication.Shared.Proxy.Page_Load(Object sender, EventArgs e) 
in D:\My Documents\Firefly\Collective\Dev\Solution\WebSites\G2F.Collective.WebApplication\Shared\Proxy.aspx.cs:line 26  
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)  
at System.Web.UI.Control.LoadRecursive()  
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

내 URL이 건설되고와 있었다 뭔가 잘못을 제안하지만, 사용하는 것에 그 크롬을 웹 개발자 도구 정확한 쿼리 문자열을 복사하여 프록시에 전달하고 브라우저 주소 표시 줄에 붙여 넣은 다음 아무런 문제없이 페이지를 방문하면 URL 구축에 문제가 없음을 의미합니다. 그래서 나는 왜 이것이 404를 반환하는지 잘 모른다. 누군가가 나에게 어떤 제안을 줄 수 있다면, 나는 그것을 크게 고맙게 생각한다.

+2

, 당신은 점점 웹 요청에 전달하는 URL을 볼 크롬 개발 도구 복사,하지만 .NET 코드에 중단 점을 유지하지 않으려는 –

+0

을 도움이 될 것입니다 희망 그것도 시도해 보았지만 브라우저에서 빌드 된 URL은 확실히 작동하지만 GetResponse()에 도달하면 404가 계속됩니다. – VampiricMonkey

답변

0

대신 "POST"의 "GET"한 사용 이처럼 내 프록시 파일보기 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    string proxyURL = HttpUtility.UrlDecode(Request.QueryString["u"]); 

    if (proxyURL != string.Empty) 
    { 
     HttpWebRequest request = (HttpWebRequest) WebRequest.Create(proxyURL); 
     request.Method = "GET"; 
     request.ContentLength = 0; 
     HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

     if (response.StatusCode.ToString().ToLower() == "ok") 
     { 
      string contentType = response.ContentType; 
      Stream content = response.GetResponseStream(); 
      if (content != null) 
      { 
       StreamReader contentReader = new StreamReader(content); 
       Response.ContentType = contentType; 
       Response.Write(contentReader.ReadToEnd()); 
      } 
     } 
    } 
} 
3

봅니다 만드는 대신 POST로 얻을 수있는 웹 요청을 변경 내가 할 필요가 무엇을 발견 다르 비슈에 의해 제안의 도움으로 당신의 AJAX 코드

+2

이것은 commen이어야합니다. 대답이 아닙니다. 솔리드 해답은 질문에 직접 답하고 OP의 문제가 왜 또는 어떻게 해결되는지에 대한 설명을 포함해야합니다. 의견은 제안을하고 OP가 시도한 것에 대한 자세한 정보를 얻는 데 더 잘 사용됩니다. – psubsee2003

+0

거의 올바른 대답이었습니다! ajax post/get은 아무런 차이가 없습니다. Proxy Webrequest가 실제로 권한을 부여한 것과 같습니다. POST 대신 GET으로 변경했고 성공했습니다! 왜 내 페이지와 다른지 모르겠지만 작동시키고 있습니다. 고맙습니다! – VampiricMonkey

관련 문제