1

有没有办法重定向到控制器并将 JSON 对象作为 POST 方法传递?我可以使用 GET 方法来实现这一点,Response.Redirect("../ControllerName/ActionName?parameter=" + jsonQuery, true);但是 GET 方法对查询字符串长度有限制。在一定长度后,它会抛出异常。

此外,任何替代方法都会非常有帮助。我想要达到的目标如下。

我有一个 WebForms 和 MVC 并排运行的应用程序。我在网络表单上有一个页面,在该页面上有一个报告按钮。单击报告按钮时,我需要将一些数据放在后面的代码(aspx.cs 文件)中并将其传递给我的控制器,然后我将填充我的模型并将其传递给我的视图。

我愿意接受任何建议和任何替代方法。

4

2 回答 2

0

您不能轻易地重定向到帖子 - 重定向会将新 URL 发送回客户端,而客户端又会发送get新 URL。

您可以重定向到自我发布的特殊表单(您将发布参数转储到页面上,然后在加载页面时运行 javascript,将完成的表单提交给您的最终操作)。请记住,这样做(假设您没有使用 AJAX)意味着您将提交常规的表单编码参数,因此您必须像您在示例中所做的那样,将 JSON 放在单个输入标签,例如:

<input id="myparam" type="hidden" name="myparam">

var someJsonString = "{---this string is built on the server---}";
document.getElementById("myparam").value = someJsonString;

如果您使用HttpClientWebClient或类似方法自己发布到您的控制器操作,您将发布为您的服务器进行传出连接,而不是从浏览器,这意味着 IP 将是您的服务器的传出 IP,您不会有任何 cookie ,身份验证等,来自浏览器。

有多种方法可以在 WebForms 和 MVC 之间进行交叉,但上次我查看时,这并不是一件容易的事 - 涉及将常规上下文转换为可用 MVC 上下文的许多自定义内容。

于 2013-11-05T21:53:13.837 回答
-1

这看起来像你正在寻找的......

.net 在后面的代码中发布表单

String ali = "your string";

            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(ali);

            WebRequest req = WebRequest.Create("http://www.pay-pos.com/test");

            req.ContentType = "application/x-www-form-urlencoded"; 
            req.ContentLength = byteArray.Length;
            req.Method = "POST"; 

            Stream dataStream = req.GetRequestStream(); 
            dataStream.Write(byteArray, 0, byteArray.Length); 
            dataStream.Close();

            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            String responseString = reader.ReadToEnd();

            response.Close();
于 2013-11-05T21:45:02.423 回答