ASP.NET服務器端控件回發到自己的頁面。這使得您想將用戶重定向到外部頁面的情況下,但出於某種原因需要發佈到該頁面(例如對於身份驗證),這是一種痛苦。如何發佈並重定向到來自ASP.Net的外部URL?
HttpWebRequest
如果您不想重定向,並且在某些情況下JavaScript很好,但如果您確實需要服務器端代碼來獲取帖子的數據,可能會變得棘手。
那麼你們如何發佈到外部URL並將用戶重定向到ASP.NET代碼隱藏代碼的結果呢?
ASP.NET服務器端控件回發到自己的頁面。這使得您想將用戶重定向到外部頁面的情況下,但出於某種原因需要發佈到該頁面(例如對於身份驗證),這是一種痛苦。如何發佈並重定向到來自ASP.Net的外部URL?
HttpWebRequest
如果您不想重定向,並且在某些情況下JavaScript很好,但如果您確實需要服務器端代碼來獲取帖子的數據,可能會變得棘手。
那麼你們如何發佈到外部URL並將用戶重定向到ASP.NET代碼隱藏代碼的結果呢?
這是我今天解決了這個問題。我從C#角上的this article開始,但發現這個例子 - 儘管技術上合理 - 有點不完整。他所說的一切都是正確的,但我需要打到幾個外部站點,將它們拼湊在一起,才能像我想要的那樣工作。
這並沒有幫助用戶在技術上沒有提交表格;他們點擊了一個鏈接轉到我們的支持中心,但是他們必須在支持中心的網站上登錄他們的http帖子。
該解決方案包括使用HttpContext.Current.Response.Write()寫的數據的形式,然後使用位的Javascript對
<body onload="">
方法的形式提交給適當的URL。
當支持中心鏈接,用戶點擊,下面的方法被調用寫響應和用戶重定向:
public static void PassthroughAuthentication()
{
System.Web.HttpContext.Current.Response.Write("<body
onload=document.forms[0].submit();window.location=\"Home.aspx\";>");
System.Web.HttpContext.Current.Response.Write("<form name=\"Form\"
target=_blank method=post
action=\"https://external-url.com/security.asp\">");
System.Web.HttpContext.Current.Response.Write(string.Format("<input
type=hidden name=\"cFName\" value=\"{0}\">", "Username"));
System.Web.HttpContext.Current.Response.Write("</form>");
System.Web.HttpContext.Current.Response.Write("</body>");
}
這種方法的關鍵是在Javascript中的那個onload事件位,其中,當頁面正文加載時,提交表單,然後將用戶重定向回我自己的主頁。這個問題的原因是我在新窗口中啓動外部網站,但不希望用戶刷新頁面時重新提交隱藏窗體。此外,隱藏的表單將頁面向下推動幾個像素,這讓我神經緊張。
我會對任何人都有這個清潔的想法非常感興趣。
埃裏克Sipple
如果您使用的是ASP.NET 2.0,則可以使用cross-page posting執行此操作。
編輯:我錯過了這個事實,你問的外部頁面。爲此,我認爲你需要讓你的ASP.NET頁面生成一個HTML表單,該表單的操作被設置爲遠程URL,並且方法被設置爲POST。 (使用跨頁面發佈,這甚至可以是不帶UI的不同頁面,只有隱藏的表單元素。)然後添加一點javascript來在客戶端收到回髮結果後立即提交表單。
我已經通過呈現一個表單自動發佈(使用JavaScript)到所需的遠程URL - 收集您在Web表單的回發中發佈的任何信息,然後構建遠程發佈表單的HTML並將其呈現回客戶端。
我爲此構建了一個實用程序類,它包含遠程URL和表單的名稱/值對的集合。
如果您擁有涉及的兩個頁面,跨頁面發佈將可用,但如果您需要發佈到其他網站(例如PayPal),則不會發布。
我會做的形式後在後面的代碼使用HttpWebRequest類。這裏是一個很好的輔助類,讓您開始:
http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx
從那裏,你可以做一個Response.Redirect的,或者你需要根據崗位的結果來改變你的動作(如果有的話是一個錯誤,顯示給用戶或其他)。我認爲你的問題已經有了答案,說實話 - 你認爲這是一個帖子或重定向,實際上你可以通過你的代碼完成它們。
我開始用這個例子從CodeProject
然後,而不是添加到頁面上,我從saalon(以上)借用,做了回覆於()。
我需要在同一個窗口中打開,與可能的幀處理問題從原來的頁面,然後重定向到一個外部網站在後面的代碼:
Private Sub ExternalRedirector(ByVal externalUrl As String)
Dim clientRedirectName As String = "ClientExternalRedirect"
Dim externalRedirectJS As New StringBuilder()
If Not String.IsNullOrEmpty(externalUrl) Then
If Not Page.ClientScript.IsStartupScriptRegistered(clientRedirectName) Then
externalRedirectJS.Append("function CheckWindow() {")
externalRedirectJS.Append(" if (window.top != window) {")
externalRedirectJS.Append(" window.top.location = '")
externalRedirectJS.Append(externalUrl)
externalRedirectJS.Append("';")
externalRedirectJS.Append(" return false;")
externalRedirectJS.Append(" }")
externalRedirectJS.Append(" else {")
externalRedirectJS.Append(" window.location = '")
externalRedirectJS.Append(externalUrl)
externalRedirectJS.Append("';")
externalRedirectJS.Append(" }")
externalRedirectJS.Append("}")
externalRedirectJS.Append("CheckWindow();")
Page.ClientScript.RegisterStartupScript(Page.GetType(), clientRedirectName, externalRedirectJS.ToString(), True)
End If
End If
End Sub