Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MemoryStream通过WebClient Post发送XML_C#_Asp.net_Xml_Webclient_Memorystream - Fatal编程技术网

C# 使用MemoryStream通过WebClient Post发送XML

C# 使用MemoryStream通过WebClient Post发送XML,c#,asp.net,xml,webclient,memorystream,C#,Asp.net,Xml,Webclient,Memorystream,我正在尝试发送在memorystream中创建的XML文件。当我尝试使用UploadFile并得到无效参数的错误时,问题就出现了。我的问题是,我是否可以使用我用WebClient.UploadFile创建的memorystream发送文件,或者我需要以其他方式发送文件 string firstname = Request.Headers["firstname"].ToString(); string lastname = Request.Headers["lastname"].ToString(

我正在尝试发送在memorystream中创建的XML文件。当我尝试使用
UploadFile
并得到无效参数的错误时,问题就出现了。我的问题是,我是否可以使用我用
WebClient.UploadFile
创建的memorystream发送文件,或者我需要以其他方式发送文件

string firstname = Request.Headers["firstname"].ToString();
string lastname = Request.Headers["lastname"].ToString();
string organization = Request.Headers["organization"].ToString();
string phone = Request.Headers["phone"].ToString();

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter xml = XmlWriter.Create(ms, settings))
{
    xml.WriteStartDocument();
    xml.WriteStartElement("List");
    xml.WriteWhitespace("\n");

    xml.WriteStartElement("Employee");
    {
        xml.WriteElementString("First", firstname);
        xml.WriteElementString("Last", lastname);
        xml.WriteWhitespace("\n");
        xml.WriteElementString("Organization", organization);
        xml.WriteElementString("Phone", phone);
    }

    xml.WriteEndElement();
    xml.WriteEndDocument();
}

WebClient client = new WebClient();

client.UploadFile("http://test.com/test.aspx", ms);

编辑:2013年编辑,因为我最初回答的时候看起来完全错了

选项:

  • 内存流中获取字节数组
    并使用
    上传数据

    client.UploadData("http://test.com/test.aspx", ms.ToArray());
    
  • 改为使用
    OpenWrite
    ,并写入返回的流

    using (var stream = client.OpenWrite("http://test.com/test.aspx"))
    {
        using (XmlWriter xml = XmlWriter.Create(stream, settings))
        {
            ...
        }
    }
    
  • 将数据写入文件,然后使用
    UploadFile

    using (XmlWriter xml = XmlWriter.Create("tmp.xml", settings))
    {
        ...
    }
    client.UploadFile("http://test.com/test.aspx", "tmp.xml");
    // Delete temporary file afterwards
    

我个人会选择前两种方法中的一种,以避免临时文件。

根据您的
无效参数


我没有看到任何支持
MemoryStream
的方法。将
内存流
转换为
字符串
,然后使用。

我也在尝试这样做。我尝试了几种可能的解决方案,但没有成功

当我尝试使用以下方法时,api获取请求,因为字符串文件名具有正确的值,但请求对象的内容为null

using (FileStream src = System.IO.File.Open(@"C:\XML\OrderXML.txt", FileMode.Open))
            {
                src.CopyTo(ms);
            }

            using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.ContentType] = "text/xml";
                wc.Headers[HttpRequestHeader.AcceptEncoding] = "Encoding.UTF8";
                //wc.Headers[HttpRequestHeader.ContentLength] = ms.Length.ToString();                    
                wc.UploadString(sURL, ms.ToString());
            }
我的RESTful API MVC控制器:

 [System.Web.Http.HttpPost]
    public async void CreateJob(string filename)
    {
        string success = "false";
        try
        {
            //XDocument doc = XDocument.Load
            XmlSerializer xmls = new XmlSerializer(typeof(PdnaXmlParse));
            Stream reqStream = await Request.Content.ReadAsStreamAsync();
            PdnaXmlParse res = (PdnaXmlParse)xmls.Deserialize(new XmlTextReader(reqStream));
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);
        }
}

我就是不明白这是怎么回事。哪里定义了允许使用流作为第二个参数的
UploadFile
重载?这是一个扩展方法吗?我同意Jim的看法,UploadData方法有必要的签名,但它发送原始数据。@太好了:你说得对,我不确定为什么以前没有看到Jim的评论。将进行编辑。我尝试过这些方法和其他方法,我始终从服务器收到消息,告诉我这是无效类型。我试图添加内容类型标题,但仍然收到一个错误。@user1040975:如果不了解更多关于服务器的信息,就很难进一步帮助您。