2012-09-28 157 views
2

我正在使用代理文件來允許我們的系統使用ajax從我們系統的不同子域中加載頁面。我第一次嘗試就成功完成了這個任務,但是我的第二次嘗試卻給了我一個錯誤,而且我正在努力解決原因,希望能得到任何幫助。遠程服務器返回錯誤:(404)未找到 - HttpWebResponse

首先這是我Proxy.aspx.cs:

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/JavaScript是隻是這樣的:

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

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

然後我使用getURL()函數來建立的網址無論我在子域上的項目需要什麼頁面。

我得到這個在所有的工作沒有問題,一個網址,但第二次嘗試,我收到此錯誤:

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) 

那對我會建議什麼是錯的我的網址正在建設,但使用Chrome的Web開發人員工具我可以複製傳遞給代理的確切查詢字符串,將其粘貼到瀏覽器地址欄中,然後訪問該頁面而不會有任何問題,這意味着正在構建的網址沒有問題。所以我不知道爲什麼這個返回404。如果有人可以給我任何建議,我將不勝感激。

+2

儘量不要從Chrome瀏覽器開發工具複製,但要保持斷點.NET代碼,看看你得到並傳遞到Web請求的URL,希望這將有助於 –

+0

也嘗試過,它構建的網址肯定可以在瀏覽器中使用,但它仍然是404的,當它碰到GetResponse() – VampiricMonkey

回答

0

「GET」,而不是「POST」與達爾維什的建議的幫助下,我發現了什麼,我需要做的是改變web請求到GET而不是POST,使得我的代理文件看起來像這樣:

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

嘗試使用您的AJAX代碼

+2

這應該是一個commen沒有答案。一個可靠的答案應直接回答這個問題,幷包含一些解釋爲什麼或如何解決OP問題的解釋。評論更好地用於提出建議並獲得有關OP已經嘗試的更多信息。 – psubsee2003

+0

幾乎是正確的答案! ajax post/get沒有什麼區別,實際上它的功能是代理webrequest。我改變了GET而不是POST,並且我們已經成功了!不知道爲什麼它與我的其他頁面如此不同,但我知道它的工作原理。謝謝! – VampiricMonkey

相關問題