如何执行HTTP POST并将用户重定向到外部站点?

时间:2014-02-10 10:16:36

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

因此,标题建议如何对外部网站执行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。
  5. 到目前为止,我已经设法提出这个:

    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”。

2 个答案:

答案 0 :(得分:2)

如果您要发布并重定向到外部网站,那么您应该直接将表单的操作转到该网址。没有理由处理你身边的任何事情。但是,除非您控制外部网站或进行某种安排才能执行此操作,否则很可能无法正常工作。几乎每个平台都实现了某种CSRF保护,以防止这种类型的事情。

答案 1 :(得分:1)

.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