【问题标题】:How to perform an HTTP POST and redirect the user to an external site?如何执行 HTTP POST 并将用户重定向到外部站点?
【发布时间】:2014-02-10 10:16:36
【问题描述】:

所以正如标题所暗示的那样,如何在向外部网站执行 HTTP POST 的同时将用户重定向到那里?我正在寻找类似的东西:

Redirect("MyWebsite.com", HttpAction.POST, new RedirectData(new { item = "itemValue"}));

必须在 ASP.NET mvc 中完成。

编辑

此行为是在外部网站上实现身份验证所必需的。认证算法:

  1. 用户导航到需要对其进行识别的网页。
  2. 网页调用认证网站的web服务,初始化认证。
  3. 初始化返回必须发布到给定 URL 的 GUID(假设它是“MyWebsite.com”)。
  4. 应该将用户重定向到发布数据的 URL。

到目前为止,我已经设法想出了这个:

string url = "MyWebsite.com";
NameValueCollection formData = new NameValueCollection();
formData["ticket"] = Ticket.ticket;
WebClient webClient = new WebClient();
byte[] responseBytes = webClient.UploadValues(url, "POST", formData);

Response.BinaryWrite(responseBytes);
Response.Redirect("MyWebsite.com", true);

我得到的响应是我应该被重定向到的网站的 HTML,问题是 - 现在怎么办?如何告诉浏览器显示通过响应获得的 HTML?如果我只是重定向到“MyWebSite.com”,它将执行一个 GET 操作,这不是我想要的。对响应进行二进制写入什么也没做——它只是将 POST 操作的响应写入我当前正在执行的操作——没有重定向到“MyWebSite.com”。

【问题讨论】:

  • 上面的代码不适合你?你遇到了什么错误?
  • 请解释为什么您需要这样做。您不能这样做,在重定向后始终执行 GET。但是,如果允许,您可以在您的网站上构建一个表单并将其发布到其他网站。

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


【解决方案1】:

如果您想发布并重定向到外部站点,那么您应该让表单的操作直接转到该 URL。没有理由站在你这边处理任何事情。但是,除非您控制外部站点或有某种安排能够做到这一点,否则它很可能无法工作。几乎每个平台都实施了某种 CSRF 保护来完全防止此类事情发生。

【讨论】:

    【解决方案2】:

    .NET 支持以下 -

       using (var client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-      urlencoded";
            var data = new Person 
            { 
                  Name = "Glitch100"
            }
            var result = client.UploadString("http://www.website.com/page/", "POST", data);
            Console.WriteLine(result);
        }
    

    可以在服务器端使用WebClient或HttpWebRequest来POST数据。

    好奇 - 想要这样做的原因是什么?

    链接:

    http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx

    POST string to ASP.NET Web Api application - returns null

    how to POST data to external URL in MVC4 using server side

    【讨论】:

    • 我正在使用这种方法通过单击按钮而不是回发将数据发布到另一个页面。我在按钮单击中手动设置了一些值并希望发布该数据
    • 然后,如果你想在客户端使用 jQuery 和 $.post 或其他东西。或者只是在 MVC 中有一个 post 方法
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2016-03-05
    • 2011-03-24
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2020-05-13
    相关资源
    最近更新 更多