3

データの投稿と外部 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));
4

4 に答える 4

1

この問題を解決する方法がわかったと思います。これが私がやったことです。

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() を使用してデータを外部リンクに渡すことができますが、2 つ目のページを通過する必要があります。つまり、Submit.aspx [GET] => DoPost.aspx [Post] => ゲートウェイ

于 2013-09-15T14:39:01.300 に答える
-1

使ってみて

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

応答リダイレクト msdn

于 2013-09-15T09:41:32.937 に答える