将QueryString转发到另一个服务器

时间:2013-01-03 11:59:40

标签: asp.net vb.net http query-string

我有一个webapp,它接受来自外部服务器的messageid和状态作为QueryString。我正在将webapp迁移到新服务器,但我需要新服务器将QueryString转发到旧服务器,以防旧服务器仍在等待更新,直到我可以迁移我的客户端。

外部网站调用我的webapp?MSGID = 12345678& RESPONSE = 0

例如:

http://dlrnotify.newserver.com/GetResponse.aspx?MSGID=12345678&RESPONSE=0

我需要在GetResponse.aspx后面的代码在本地处理消息,然后将请求转发到旧服务器。例如,打电话:

http://dlrnotify.oldserver.com/GetResponse.aspx?MSGID=12345678&RESPONSE=0

我真的不想将用户重定向到旧的Web服务器,只是为了从我的应用程序传递查询字符串。

我可以通过调用Response.QueryString.ToString()来获取QueryString我只需要知道如何将其发布到旧服务器而不会破坏任何内容。

很抱歉,如果这是一个愚蠢的问题,我不经常使用网络应用,显然使用了错误的搜索字词。

3 个答案:

答案 0 :(得分:2)

您可以使用HttpWebRequest和HttpWebResponse。下面是一个使用这个的例子

  Uri uri = new Uri("http://www.microsoft.com/default.aspx");
  if(uri.Scheme = Uri.UriSchemeHttp) 
  {
        HttpWebRequest request = HttpWebRequest.Create(uri);
        request.Method = WebRequestMethods.Http.Get;
        HttpWebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string  tmp = reader.ReadToEnd();
        response.Close();
        Response.Write(tmp);
 }

关于如何使用HttpWebRequest将数据发布到远程网页的示例代码

   Uri uri = new Uri("http://www.amazon.com/exec/obidos/search-handle-form/102-5194535-6807312");
   string data = "field-keywords=ASP.NET 2.0";
   if (uri.Scheme == Uri.UriSchemeHttp)
   {
       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
       request.Method = WebRequestMethods.Http.Post;
       request.ContentLength = data.Length;
       request.ContentType = "application/x-www-form-urlencoded";
       StreamWriter writer = new StreamWriter(request.GetRequestStream());
       writer.Write(data);
       writer.Close();
       HttpWebResponse response = (HttpWebResponse)request.GetResponse();
       StreamReader reader = new StreamReader(response.GetResponseStream());
       string tmp = reader.ReadToEnd();
       response.Close();
       Response.Write(tmp);
   }

答案 1 :(得分:0)

在新服务器上执行代码(进程消息)后,手动生成一个 HttpWebRequest ,它应该是您的旧服务器,具有与您已经想出的相同的查询字符串。

答案 2 :(得分:0)

我的任务与您的帖子相同。但是还有一点。 因为我们有两个Web应用程序,一个在asp.net中,另一个在PHP中。在两者中我们创建用户配置文件现在的任务是在Asp.NET应用程序中创建用户,我们需要从Asp.Net应用程序中保存PHP应用程序中的相同信息。

我正在使用下面的代码,但它并没有下降,请你看看它,让我知道我错过了什么。

        CookieContainer cookies = new CookieContainer();
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(@"http://localhost/admin/config/popup_user_info_brand.php");
        request.PreAuthenticate = true;
        request.AllowWriteStreamBuffering = true;
        request.CookieContainer = cookies; // note this
        request.Method = "POST";

        string boundary = System.Guid.NewGuid().ToString();
        string Username = "admin";
        string Password = "admin";

        if (!string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password))
        {
            request.Credentials = new NetworkCredential(Username, Password);
            request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Content-Disposition: form-data; name=\"name\"");
            sb.AppendLine("Singh");

            sb.AppendLine("Content-Disposition: form-data; name=\"username\"");
            sb.AppendLine("Singh123");

            sb.AppendLine("Content-Disposition: form-data; name=\"email\"");
            sb.AppendLine("a@b.com");

            sb.AppendLine("Content-Disposition: form-data; name=\"password\"");
            sb.AppendLine("P@ssword");

            // This is sent to the Post
            byte[] bytes = Encoding.UTF8.GetBytes(sb.ToString());

            request.ContentLength = bytes.Length;

            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Flush();
                requestStream.Close();

                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                       HttpContext.Current.Response.Write(reader.ReadToEnd());
                    }
                }
            }
        }

注意: - PHP网站是第三方,我们无法访问代码。

谢谢, 海金妮。