如何发布,然后重定向到ASP.Net的外部URL?

ASP.NET服务器端控件回发到他们自己的页面。这使得您想要将用户重定向到外部页面的情况,但出于某种原因需要发布到该页面(例如对于身份验证),这是一种痛苦。

如果你不想重定向,那么 HttpWebRequest 效果很好,而且在某些情况下,JavaScript是很好的,但如果你确实需要服务器端代码来获取帖子的数据, 。

那么,您如何发布到外部URL并将用户重定向到ASP.NET代码隐藏代码的结果呢?

0

6 答案

我今天解决了这个问题。我从C#角的这篇文章开始,但发现这个例子 - 虽然技术上合理 - 有点不完整。他所说的一切都是正确的,但我需要打到几个外部站点,将它们拼凑在一起,才能像我想要的那样工作。

这对用户没有技术上提交表单毫无帮助;他们点击了一个链接转到我们的支持中心,但是他们必须在支持中心的网站上登录他们的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的加载,当页面正文加载时,提交表单然后将用户重定向到我自己的主页。这个问题的原因是我在新窗口中启动外部网站,但不希望用户刷新页面时重新提交隐藏窗体。此外,隐藏的表单将页面向下推动几个像素,这让我神经紧张。

我会对任何人有任何更清晰的想法非常感兴趣。

埃里克希普尔

0
额外

如果您使用的是ASP.NET 2.0,则可以使用跨页面发布

编辑:我错过了一个事实,即您正在询问一个外部页面。为此,我认为你需要让你的ASP.NET页面生成一个HTML表单,该表单的操作被设置为远程URL,并且方法被设置为POST。 (使用跨页面发布,这甚至可以是不带UI的不同页面,只有隐藏的表单元素。)然后添加一点javascript来在客户端收到回发结果后立即提交表单。

0
额外

我通过呈现一个表单自动发布(使用JavaScript)到所需的远程URL - 在Web表单的回发中收集任何需要的信息,然后构建远程发布表单的HTML并将其呈现回来给客户。

我为此构建了一个实用程序类,它包含远程URL和表单的一组名称/值对。

如果您拥有涉及的两个页面,则跨页面发布将起作用,但如果您需要发布到其他网站(例如PayPal),则不会发布。

0
额外

我会在使用HttpWebRequest类的代码中执行表单发布。这是一个很好的辅助课,让你开始:

http://geekswithblogs.net/rakker/archive/2006/04/ 21 / 76044.aspx

从那里,你可以做一个Response.Redirect,或者你需要根据帖子的结果改变你的行动(如果有错误,把它显示给用户或其他)。我认为你的问题已经有了答案,说实话 - 你认为这是一个帖子或重定向,实际上你可以通过你的代码来完成它们。

0
额外

I started with this example from CodeProject

然后,我没有添加到页面,而是从saalon(上面)借来并做了Response.Write()。

0
额外

我需要在同一窗口中打开,处理来自原始页面的可能的框架问题,然后在后面的代码中重定向到外部站点:

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
0
额外