使用Method = POST重定向到Uri并从ASP.NET MVC Controller Action Result提交表单数据

时间:2013-02-01 15:33:49

标签: c# asp.net asp.net-mvc redirect

我有一个表单,我需要用户在我的网站上提交,这将POST到我的控制器。表单操作在控制器操作中看起来像action="~/Home/FormCapture/"我将执行一些验证规则。

我目前正在做的是,执行我的验证,并返回一个HTML视图,该视图由完全相同的表单和不同的action="https://otherServer/cgi?-submit"组成,并填写用户提交的数据,以及在页面加载时提交表单的javascript。

虽然上面的确有效,但我想避免返回一个在加载时提交的表单的中间步骤,我似乎无法让它工作,但我想我想做类似的事情

return Redirect("https://otherServer/cgi?-submit", 
           FormMethods.Post, "value1=abc&val2=123");

注意:虽然这可能看起来像捕获系统的网络钓鱼/驱动器(因为它),我仍然坚持使用一些黑盒子网络发布技术,不允许我共享身份验证cookie /令牌。我的应用程序中有一些资源需要黑盒系统的用户访问,所以我需要从我的站点登录到这两个站点,所以当黑盒系统链接到我的应用程序时,已经有一个身份验证令牌并且不会提示用户登录两次。

2 个答案:

答案 0 :(得分:1)

好的,假设这两个服务器位于同一个域中,这里有一个可行的解决方案:

  1. 用户将表​​单提交到您的网站。

  2. 在您的控制器代码中,您使用WebClient类将相同的数据发布到其他服务器。

  3. 据推测,其他服务器会将cookie / sessionid / auth令牌作为cookie传回。从WebClient中提取该cookie并将其传递给您的响应。

  4. 用户现在应该拥有您的身份验证cookie和其他站点的身份验证cookie。假设它们位于同一个域中,当用户转到其他站点时,它们应该已经过身份验证。

答案 1 :(得分:0)

您可以尝试TempData以避免在视图中使用GET参数。

TempData["your_key"] = your_model_data;
TempData.Keep();
RedirectToAction("Another_action");

现在正在执行,检索值:

Model your_model_data = TempData["your_key"] AS Model ;