C# 将xml数据从新浏览器打开的Windows窗体传递到URL

C# 将xml数据从新浏览器打开的Windows窗体传递到URL,c#,.net,C#,.net,我当前的project Windows窗体出现问题,需要将xml数据传递到新web浏览器打开的URL。有人能给我一些线索吗?我在网上搜索了一下,找到了两种可能的方法 使用HttpWebRequest在流中发送xml数据并创建URL。但你怎么能用这种方式“打开新浏览器”? 使用Process.Start或ProcessInfo.Start。您可以在URL参数中指定数据。但是如何传递xml数据呢? 谢谢新浏览器窗口的目标URL是在您自己的网站上还是在外部网站上?您是否需要适用于所有浏览器而不仅仅是I

我当前的project Windows窗体出现问题,需要将xml数据传递到新web浏览器打开的URL。有人能给我一些线索吗?我在网上搜索了一下,找到了两种可能的方法

使用HttpWebRequest在流中发送xml数据并创建URL。但你怎么能用这种方式“打开新浏览器”? 使用Process.Start或ProcessInfo.Start。您可以在URL参数中指定数据。但是如何传递xml数据呢?
谢谢

新浏览器窗口的目标URL是在您自己的网站上还是在外部网站上?您是否需要适用于所有浏览器而不仅仅是Internet Explorer的软件?从你问题的本质出发,我将从以下假设开始:你可能正试图将值传递给在新窗口中打开的外部站点,并且你希望支持尽可能多的浏览器,而不仅仅依赖IE,这只是一种良好的实践。然后,实际上您唯一的选择是将XML作为URL查询字符串部分的一部分传递,这是URL中问号后面存在的名称=值对。执行此操作时,需要确保正在构建的URL中的name=VALUE对的值部分是正确的URL编码。否则,如果不在值部分使用URL编码,接收站点将无法正确解析数据。有关URL编码的信息,请参阅以下文章:

如果通过基于URL的name=value参数传递XML格式的数据或任何大型数据字符串,则需要注意的一点是,URL的大小可能会受到限制,具体取决于所使用的浏览器和版本。因此,如果您将其传递给另一个已经使用此技术的网站,那么我假设它已经是一个功能性网站,并且您没有在URL中为每个请求传递大量数据


如果您的需求与这些假设不同,请详细说明,并可能为您提供更多/更好的选择。

无需打开新浏览器来发送和接收数据。您可以使用HttpWebRequest POST方法发送XML,并使用HttpWebResponse读取响应


为什么要打开新浏览器?发送xml后需要响应吗?感谢您的响应。xml数据将在URL上处理,并在发送和Page.Request和Page.Response后添加其他数据。发送后还将使用请求和Page.Response。请注意,通过QueryString传递的数据有大小限制。看看如何使用WebClient类并发布XML,不过在这种情况下,XML可能有些过分,您应该将所有内容作为表单值传递。谢谢您的回复。这些数据将传递到外部站点,并且可以使用IE来减少所有浏览器的工作。xml数据有将近100个密钥要通过https传递。url的查询字符串是有效的解决方案还是会导致涉及大量xml操作工作?发送之后,更多的数据将添加到xml中,并等待外部站点的进一步处理。对我来说,最理想的方法是同时传递数据和打开IE。发送到外部站点的xml数据将等待在线用户填写更多字段。这就是为什么我需要打开一个新窗口,以便进一步在线处理。在新浏览器中打开的页面上是否有发送数据和预填充数据的方法?您的服务器是什么?web服务或asp.net网站?抱歉,没有提到服务器是asp.net网站。
using System.Net;
using System.IO;
using System.Text;

private string SendRequest(string xml, string url)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    byte[] requestBytes = Encoding.ASCII.GetBytes(xml);
    req.Method = "POST";
    req.ContentType = "text/xml;charset=utf-8";
    req.ContentLength = requestBytes.Length;
    Stream requestStream = req.GetRequestStream();
    requestStream.Write(requestBytes, 0, requestBytes.Length);
    requestStream.Close();
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.Default);
    string response = sr.ReadToEnd();
    sr.Close();
    res.Close();
    return response; 
}