MVC3 Http发布到第三方网站并添加自定义Http标头

时间:2011-11-28 21:57:29

标签: asp.net-mvc-3

任何人都试图在MVC应用程序中添加自定义的Http Header,我将表单操作设置为第三方URL,第三方URL期望某些自定义Http Headers。用户从MVC应用程序提交表单后,上下文也必须切换到第三方URL。

我需要构建MVC应用程序并从服务器端读取值,并最终在标题中组合它们并提交表单。

由于

哈迪

2 个答案:

答案 0 :(得分:1)

使用HTML <form>元素时,无法添加自定义标头。在这方面,HTML规范无需提供任何内容。

添加自定义标头的唯一方法是使用WebClientHttpWebRequest从ASP.NET MVC应用程序向第三方网站执行POST请求。两者都允许您在对给定URL执行HTTP请求时设置自定义HTTP标头。显然,缺点是您代表服务器应用程序而不是客户端执行请求,因此切换上下文可能具有挑战性。

根据具体的具体情况(您还没有详细说明),可能会有不同的方法来解决问题。

答案 1 :(得分:0)

根据您的问题,您应该使用自定义的HTTP请求将此信息发布到第三方网站。

您可以通过使用HttpWebRequest处理表单帖子并使用操作结果与用户共享确认来直接在操作中执行此操作。

如:

public ActionResult PostTest()
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx ");
            // Set the Method property of the request to POST.
            request.Method = "POST";
            // Create POST data and convert it to a byte array.
            string postData = "This is a test that posts this string to a Web server.";
            byte[] byteArray = Encoding.UTF8.GetBytes (postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream ();
            // Write the data to the request stream.
            dataStream.Write (byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close ();
            // Get the response.
            WebResponse response = request.GetResponse ();
            // Display the status.
            Console.WriteLine (((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream ();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader (dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd ();

            // Clean up the streams.
            reader.Close ();
            dataStream.Close ();
            response.Close ();


            return View(responseFromServer);
        }

请参阅MSDN on how to use HttpWebRequest to send HTTP Post forms