C# 如何使用WebClient将文本文件从Windows窗体上载到特定Url?

C# 如何使用WebClient将文本文件从Windows窗体上载到特定Url?,c#,winforms,webclient,C#,Winforms,Webclient,我想通过“Post”将VisualStudio C#Windows窗体应用程序中的普通文本文件发送到带有WebClient的Url。 我的代码: 这就是我目前发现的。当我运行这段代码时,我的web项目中的post方法被命中,但param为null(这是可以理解的,因为它的数据类型是字符串,但当我将文件地址更改为简单的字符串(如“test”)时,它也为null) 所以我真正的问题是我无法将文本数据发送到我的URL 首先,您的内容类型应该是“application/text”,而不是“applica

我想通过“Post”将VisualStudio C#Windows窗体应用程序中的普通文本文件发送到带有WebClient的Url。 我的代码:

这就是我目前发现的。当我运行这段代码时,我的web项目中的post方法被命中,但param为null(这是可以理解的,因为它的数据类型是字符串,但当我将文件地址更改为简单的字符串(如“test”)时,它也为null)


所以我真正的问题是我无法将文本数据发送到我的URL

首先,您的内容类型应该是“application/text”,而不是“application/x-www-form-urlencoded”

其次,此方法默认为HTTP/HTTPS的POST,因此使用重载,该重载接受两个字符串参数UploadString(“目标Url”、“数据”)。如果您必须使用三个参数重载,那么方法应该是“POST”而不是“POST”

此方法不会为您读取文件,您需要添加代码将文件内容读入字符串,然后将该字符串传递给UploadString方法的数据参数

我可能应该补充一点,在接收api中,您将从Request.InputStream对象读取数据。与任何流一样,您将把它读入字节数组,并需要将其编码回字符串。必须使用与将文件读入字符串相同的编码


流InputStream是单向只读流,因此在编码回字符串之前,您需要将其全部读取到字节数组中。

但是在文档中,最后一个字符串应该包含文件名。
using(WebClient w = new WebClient())
{
   w.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
   string HtmlResult = w.UploadString(@"http://xxx/api/test", "Post", @"C:\Temp\T.txt");
}