为什么 WebClient.UploadValues 覆盖了我的 html 网页?

Why does WebClient.UploadValues overwrites my html web page?

我熟悉 Winform 和 WPF,但对 Web 开发不熟悉。有一天看到WebClient.UploadValues决定试一试

static void Main(string[] args)
{
    using (var client = new WebClient())
    {
        var values = new NameValueCollection();
        values["thing1"] = "hello";
        values["thing2"] = "world";
        //A single file that contains plain html
        var response = client.UploadValues("D:\page.html", values);
        var responseString = Encoding.Default.GetString(response);
        Console.WriteLine(responseString);
    }
    Console.ReadLine();
}

运行后,什么也没有打印出来,html文件内容变成了这样:

thing1=hello&thing2=world

谁能解释一下,谢谢!

UploadValues 方法旨在与 HTTP 协议一起使用。这意味着您需要在网络服务器上托管您的 html 并发出这样的请求:

var response = client.UploadValues("http://some_server/page.html", values);

在这种情况下,该方法将使用 application/x-www-form-urlencoded 编码将值发送到服务器,并且它将 return 来自 HTTP 请求的响应。

我从未将 UploadValues 与本地文件一起使用,documentation 似乎也没有提及任何相关内容。他们只提到 HTTP 或 FTP 协议。所以我想这是将它与本地文件一起使用时的一些副作用 -> 它只是用正在发送的有效负载覆盖该文件的内容。

您使用的 WebClient 不符合预期。

WebClient.UploadValues的目的是将指定的name/value集合上传到由指定的URI标识的资源。

但它不应该是您磁盘上的某个 本地文件,而应该是一些 web-service 侦听请求和发出回应。