2011-05-19 40 views
15

我想將響應重定向到另一個URL,同時它包含HTTP頭中的一些POST數據。Response.Redirect將數據POST到ASP.NET中的另一個URL

// Inside an ASP.NET page code behind: 
Response.Redirect("http://www.example.com/?data=sent%20via%20GET"); 
// This will sent data to http://www.example.com via GET. 
// I want to POST this data to http://www.example.com instead. 

如何在ASP.NET中做到這一點?

+0

可能重複[Response.Redirect與POST而不是獲取?](http://stackoverflow.com/questions/46582/response-redirect-with-post-instead-of-get) – tghw 2012-12-18 01:46:31

回答

49

您也可以發送龐大的數據與此招..

Response.Clear(); 

StringBuilder sb = new StringBuilder(); 
sb.Append("<html>"); 
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>"); 
sb.AppendFormat("<form name='form' action='{0}' method='post'>",postbackUrl); 
sb.AppendFormat("<input type='hidden' name='id' value='{0}'>", id); 
// Other params go here 
sb.Append("</form>"); 
sb.Append("</body>"); 
sb.Append("</html>"); 

Response.Write(sb.ToString()); 

Response.End(); 
+0

有用的把戲。沒有任何通過POST方法發送值的直接方法嗎? – rDroid 2013-04-26 09:10:17

+0

用戶是否可以在任何階段查看源代碼(或類似代碼)並查看發佈的數據是通過了哪些數據? – Nostradamus 2013-09-16 03:26:03

+0

如果我們需要添加cookies以及在外部網站上進行發佈工作,該怎麼辦? – confusedMind 2014-08-13 14:01:20

12

您無法使用重定向進行POST。根據定義,重定向意味着服務器使用新位置向客戶端發送302重定向HTTP狀態代碼,以便客戶端向此新位置發出GET請求。這就是HTTP協議的工作原理,並且您無法做到這一點。

因此,實現這一目標的一種方法是重定向到某個臨時頁面,該頁面將包含HTML <form>method="POST",幷包含要作爲隱藏字段發送的值。然後你可以使用javascript來自動提交這個表單。

+0

我的數據很大,超過4096字節,這是目前瀏覽器可以處理的最大值。如何在沒有java腳本的情況下發布這些數據? – Xaqron 2011-05-19 17:03:26

+0

@Xaqron有兩種可能性:您創建一個HTML表單並將數據放在此表單中的隱藏字段中,然後提交表單,或者使用WebRequest執行請求服務器端。 – 2011-05-19 17:04:45

+0

關於您的最新評論:客戶端瀏覽器應該將數據傳輸到另一臺服務器。建議:如何清理標題,添加POST標題,然後重定向? – Xaqron 2011-05-19 17:06:01

0

雖然這是很老的線程,我想我會分享我如何做到這一點。

假設發送頁面是a.aspx,目標頁面是b.aspx。

  1. 在a.aspx中收集用戶輸入。用戶點擊提交按鈕,導致回發。
  2. a.aspx中的Button_click事件,處理卷數據(例如保存上傳的二進制文件)。確定卷數據的鏈接並將其附加到request.form名稱 - 值字符串的末尾。
  3. 加密最終名稱 - 值字符串並將其設置爲cookie。
  4. 重定向到b.aspx
  5. 在b.aspx中,檢索該cookie,解密並獲得所有名稱 - 值對。現在像往常一樣處理它們。

優點: (a)b.aspx顯示在瀏覽器地址欄中。它進入瀏覽器的歷史。 Server.transfer執行這些操作。 (b)它發揮了後期的作用。用戶無法在查詢字符串中看到名稱 - 值對。

0

您可以使用viewstate「傳輸」數據並在新頁面或甚至是同一頁面上讀取數據。

+0

不在'response.redirect(「destination」,false)上, ' - 它使用HTTP 301進行傳輸;不提供頁面。 – GlennG 2017-03-22 14:24:39

相關問題