2013-09-15 5 views
2

У меня возникли проблемы с отправкой данных и перенаправлением на внешний 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)); 

Итак, любые предложения по решению этой проблемы? Благодарю.

+0

онлайн-платежей! это https url? http://www.terminally-incoherent.com/blog/2008/05/05/send-a-https-post-request-with-c/ – Damith

+0

Да, это https – woodykiddy

ответ

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 (), чтобы передать данные во внешнюю ссылку, хотя нам потребуется пройти вторую страницу. Короче говоря, Submit.aspx [GET] => DoPost.aspx [сообщение] => Шлюз

-1

Попробуйте использовать

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

Response redirect msdn

+1

Поскольку Response.Redirect использует GET, любые отправленные данные с использованием GET будут отклонены шлюзом, к сожалению :( – woodykiddy

0

Вы должны смотреть на HttpWebRequest.

Вот еще один вопрос, который довольно подробно объясняет, что вам нужно сделать для вашей проблемы.

Post form data using HttpWebRequest

Смежные вопросы