C# 使用WebClient下载包含POST数据的文件的正确方法

C# 使用WebClient下载包含POST数据的文件的正确方法,c#,download,webclient,C#,Download,Webclient,我目前有一个将数据发布到web服务器,然后下载响应的应用程序。我使用UploadDataAsync实现结果,使用以下方法: using (var client = new WebClient()) { var dataToPost = Encoding.Default.GetBytes(postBody); client.Headers.Add(HttpRequestHeader.Authorization, au

我目前有一个将数据发布到web服务器,然后下载响应的应用程序。我使用
UploadDataAsync
实现结果,使用以下方法:

        using (var client = new WebClient())
        {
            var dataToPost = Encoding.Default.GetBytes(postBody);

            client.Headers.Add(HttpRequestHeader.Authorization, authToken); // Add the authorization header

            client.UploadDataCompleted += UploadCompleteCallback; // What do do when the download completes
            client.UploadProgressChanged += UploadProgressCallback; // What to do when the download is in progress

            client.UploadDataAsync(uri, "POST", dataToPost);

            while (client.IsBusy)
            {
                // We're going to wait until the operation completes
            }
        }
它确实成功地下载了文件,但是我想知道它是否正确,因为我没有使用
DownloadDataAsync

我之所以不这样做,是因为我找不到一种方法来使用
DownloadDataAsync
方法发送帖子数据

此外,
UploadProgressCallback
仅在应用程序启动时调用一次,然后等待一段时间,基本上在文件完成时再次调用get(因此不是流畅的下载进度指示器)。这可能是因为我使用了
上传
而不是
下载

为了完整性这里是我的
上传进度回调

    private static void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
    {
        // Displays the operation identifier, and the transfer progress.
        Console.WriteLine("{0} Downloaded {1} of {2} bytes. {3} % complete...",
            (string)e.UserState,
            e.BytesReceived,
            e.TotalBytesToReceive,
            e.ProgressPercentage);
    }