【问题标题】:How do I POST data from an asp.net MVC controller to a non-MVC asp.net page?如何将数据从 asp.net MVC 控制器发布到非 MVC asp.net 页面?
【发布时间】:2011-01-06 04:08:01
【问题描述】:

我们公司的一个部门正在使用经典的 asp.net,而我们的部门正在使用 MVC。

我们需要将 5 个变量传递给他的页面(通过表单提交)。有人可以展示一个将表单数据从 MVC 控制器发布到期望表单变量的 asp.net 页面的简单示例吗?

【问题讨论】:

    标签: c# asp.net-mvc-2 post get


    【解决方案1】:

    如果我没看错,您应该能够做到这一点,而无需担心跨域/应用程序。您想在控制器中执行此操作,因此您可以使用HttpWebRequest 类来发布数据。就目标应用程序而言,它在概念上与从 Web 浏览器发布内容相同。

    这是一个快速而肮脏的 sn-p:

    // name / value pairs. field names should match form elements
    string data = field2Name + "=" + field1Value + "&" + field2Name+ "=" + field2Value
    
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(<url to other applications form action>);
    
    // set post headers
    request.Method = "POST";
    request.KeepAlive = true;
    request.ContentLength = data.Length;
    request.ContentType = "application/x-www-form-urlencoded";
    
    // write the data to the request stream         
    StreamWriter writer = new StreamWriter(request.GetRequestStream());
    writer.Write(data);
    
    // iirc this actually triggers the post
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    

    【讨论】:

    • 这看起来像我正在寻找的解决方案。谢谢,我试试看!
    • 记得刷新你的 writer 或使用 using(var writer = new StreamWriter(request.GetRequestStream()) { writer.Write(data); }
    【解决方案2】:

    如果您跨域或跨应用程序,我认为您可能不走运。你能直接到另一个站点并使用查询字符串吗?

    或者写到一个表并直接到另一个站点。

    真的不确定您是否能够在其他网站上发帖,因为我认为这违反了安全模型。

    【讨论】:

    • 我不能使用查询字符串,因为安全暴露,用户修改太容易了。它正在跨域。
    • 对于跨域,将您的对象转换为 JSON 并序列化 Javascript,然后如果控制器返回 View,则将其分配给 ViewBag,如​​果它重定向到另一个 View,则将其分配给 TempData。然后这就是我所做的:使用 AngularJS 发布到启用了 CORS 的 WebAPI。 WebAPI 可以指定允许发布到其控制器的 URL。 @Html.Raw(TempData["yourdata"]) 可以分配给 Angular 可以将其发布到 WebAPI 的 Javascript 对象。请参阅此答案:stackoverflow.com/a/32769992/1171842。对于 Classic ASP,需要将接受数据的代码移植到 WebAPI。
    【解决方案3】:

    我可能遗漏了这个微妙的问题,但你不能将 MVC 表单上的 action 设置为将接收它的经典 asp 页面的 url 吗?

    这些字段将在您可以在 ASP 端读取的表单标题中提供。

    唯一的问题是 ASP 站点是否具有跨站点请求伪造检测(但如果它们是内部应用,您可以在 ASP 端向伪造检测代码添加例外)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2016-02-07
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多