使用MVC 4中的POST参数重定向以进行支付网关集成

时间:2014-12-20 04:45:56

标签: c# asp.net-mvc-4 razor payment-gateway http-status-code-400

我正在尝试使用razor中的mvc4进行支付网关集成。因为我需要调用带有预填表格的页面。

使用以下方法,我正在形成post方法表单:

private static string PreparePOSTForm(string url, System.Collections.Hashtable data)      // post form
    {
        //Set a name for the form
        string formID = "PostForm";
        //Build the form using the specified data to be posted.
        StringBuilder strForm = new StringBuilder();
        strForm.Append("<form id=\"" + formID + "\" name=\"" +
                       formID + "\" action=\"" + url +
                       "\" method=\"POST\">");

        foreach (System.Collections.DictionaryEntry key in data)
        {

            strForm.Append("<input type=\"hidden\" name=\"" + key.Key +
                           "\" value=\"" + key.Value + "\">");
        }

        strForm.Append("</form>");
        //Build the JavaScript which will do the Posting operation.
        StringBuilder strScript = new StringBuilder();
        strScript.Append("<script language='javascript'>");
        strScript.Append("var v" + formID + " = document." +
                         formID + ";");
        strScript.Append("v" + formID + ".submit();");
        strScript.Append("</script>");
        //Return the form and the script concatenated.
        //(The order is important, Form then JavaScript)
        return strForm.ToString() + strScript.ToString();
    }

在我的Controller页面中,我使用必需参数调用PreparePostForm,我收到了POST请求格式。

[HttpPost]
 public ActionResult OrderSummary()
        {
            string request=PreparePOSTForm("payment URL","hashdata required for payment")
            return Redirect(request);
        }

但重定向时我的误差低于此值。

  

错误请求 - 无效网址

     

HTTP错误400.请求网址无效。

我在这里错过了一些与POST请求一起工作的东西。有人可以帮助我。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您无法通过Redirect方法发布表单。您可以将生成的表单字符串发送到View,之后通过Javascript发布表单。

public ActionResult OrderSummary()
{
    string request=PreparePOSTForm("payment URL","hashdata required for payment")
    return View(model:request);
}

并在OrderSummary视图中

@model string

@Html.Raw(Model)

<script>
    $(function(){
       $('form').submit();
    })
</script>

答案 1 :(得分:0)

我建议您创建一个Action,其表单会在参数中收到Model。然后,只需在重定向到此Action

时传递模型
[HttpPost]
public ActionResult OrderSummary()
{
    return RedirectToAction("OrderForm", new { HashData = hashData });
}

[HttpGet]
public ViewResult OrderForm(string hashData)
{
    OrderFormModel model = new OrderFormModel();
    model.HashData = hashData;
    return View(model);
}

[HttpPost]
public ActionResult OrderForm(OrderFormModel model)
{
    if(ModelState.IsValid)
    {
        // do processing
    }
}

答案 2 :(得分:0)

您可以使用JavaScript。

创建一个包含html表单的页面并通过javascript提交并将您的信息作为输入:隐藏在表单中。

这会将数据提交到您想要的其他地方。在html中执行此操作可以为您提供更多控制权,并且您无需为应用中的每个重定向编写其他答案中显示的操作。