【问题标题】:How to post data and redirect to an external page?如何发布数据并重定向到外部页面?
【发布时间】:2013-09-19 14:13:54
【问题描述】:

我在发布数据和重定向到外部 URL 时遇到问题。外部 URL 是一个在线支付网关,只接受使用 POST 方法提交的表单。

如下所示的简单 html 表单可以正常工作

<html>
<body>
<form action="externalpage.url" method="post">
<input type="hidden" name="name1" value="1234">
<input type="hidden" name="name2" value="abcd">
<input type="submit" value="Submit Form">
</form>
</body>
</html>

但在我的场景中,当用户单击我的 aspx 页面上的按钮时,我需要先进行一些服务器端处理,例如创建一个NameValueCollection 对象,然后将她重定向到支付网关。

我尝试使用此链接中的示例:http://www.codeproject.com/Articles/37539/Redirect-and-POST-in-ASP-NET,但由于某种原因该页面没有重定向到外部 URL。以下代码行似乎没有做任何事情。

page.Controls.Add(new LiteralControl(strForm));

【问题讨论】:

标签: c# .net post redirect webforms


【解决方案1】:

尝试使用

Response.Redirect("http://www.microsoft.com");

Response redirect msdn

【讨论】:

  • 由于 Response.Redirect 使用 GET,任何使用 GET 提交的数据都会被网关拒绝:(
【解决方案2】:

你需要看看 HttpWebRequest。

这是另一个问题,它非常彻底地解释了你需要为你的问题做些什么。

Post form data using HttpWebRequest

【讨论】:

    【解决方案3】:

    我想我想出了如何解决这个问题。这是我所做的。

    创建一个中间页面,例如DoPost.aspx。

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Post Form</title>
        <script>
            function PostData() {
                document.getElementById("form1").submit();
            }
        </script>
    </head>
    <body onload="PostData()">
        <form id="form1" runat="server">
        <div>
            <asp:Literal ID="ltrPostData" runat="server"></asp:Literal>
        </div>
        </form>
    </body>
    </html>
    

    然后在后面的代码中,

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            var url = "external.url";
            form1.Action = url;
            ltrPostData.Text = "Create <input type='hidden' name='data name' value='data value' /> html controls from Request.QueryString() and assign the string value to the Literal control's Text property.";
        }
    }
    

    在 Submit.aspx 上,按钮点击事件发生的地方,

    //assume that the NameValueCollection object has already been created and populated  
    var redirectUrl = string.Format("{0}?{1}", "DoPost.aspx", BuildQueryString(data));
    Response.Redirect(redirectUrl, true);
    
    public static string BuildQueryString(NameValueCollection data)
    {
        // create query string with all values
        return string.Join("&", data.AllKeys.Select(key => string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(data[key]))));
    }
    

    如此有效,我们仍然可以使用 Response.Redirect() 将数据传递到外部链接,尽管我们需要通过第二个页面。简而言之,Submit.aspx [GET] => DoPost.aspx [Post] => 网关

    【讨论】:

      【解决方案4】:

      这是我给你的解决方案,一个简单而优雅的解决方案

      Redirect and Post in ASP.NET by Samer Abu Rabie

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多