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

本文关键字:集成 网关 MVC 中的 POST 重定向 参数 使用 | 更新日期: 2023-09-27 18:34:43

我正在尝试使用 mvc4 在 razor 中进行支付网关集成。在这种情况下,我需要调用带有预填帖子表单的页面。

使用以下方法,我正在形成后方法形式:

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();
    }

在我的控制器页面中,我正在使用必需的参数调用PreparePostForm,并且我正在接收 POST 请求格式。

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

但是在重定向时,我得到以下错误。

错误请求 - 无效的 URL

HTTP 错误 400。请求 URL 无效。

我在这里缺少一些处理 POST 请求的东西。有人可以帮我吗?

提前谢谢。

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

您不能通过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>
你可以

用JavaScript做到这一点。

制作一个确实有html表单的页面,并通过javascript提交它,并将您的信息作为input:hidden in form。

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

我建议您创建一个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
    }
}