WebClient请求期间发生异常

时间:2016-02-01 05:38:32

标签: c# asp.net-mvc winforms file-upload webclient

WinForm应用程序代码 -

FileSystemWatcher fsWatcher = new FileSystemWatcher();
fsWatcher.Created += new FileSystemEventHandler(OnCreated);

    public void OnCreated(object sender, FileSystemEventArgs e)
    {
        try
        {
            var wc = new WebClient();

            byte[] response = 
                    wc.UploadFile("http://localhost:54802/Home/ReceiveAudio/", 
                                  "POST", e.FullPath);
            string s = System.Text.Encoding.ASCII.GetString(response);
            MessageBox.Show(s);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

MVC控制器操作方法 -

    [HttpPost]
    public JsonResult ReceiveAudio()
    {
        return Json("Success", JsonRequestBehavior.AllowGet);
    }

我收到错误 - An exception occurred during a WebClient request.

任何帮助?

1 个答案:

答案 0 :(得分:1)

在Windows端:

private void uploadButton_Click(object sender, EventArgs e)
{
    var openFileDialog = new OpenFileDialog();
    var dialogResult = openFileDialog.ShowDialog();    
    if (dialogResult != DialogResult.OK) return;              
    Upload(openFileDialog.FileName);
}

private void Upload(string fileName)
{
    var client = new WebClient();
    var uri = new Uri("https://www.yoursite.com/UploadFile/");  
    try
    {
        client.Headers.Add("fileName", System.IO.Path.GetFileName(fileName));
        var data = System.IO.File.ReadAllBytes(fileName);
        client.UploadDataAsync(uri, data);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

在服务器端,您应该使用WebApi:

[HttpPost]
public async Task<object> UploadFile()
{
    var file = await Request.Content.ReadAsByteArrayAsync();
    var fileName = Request.Headers.GetValues("fileName").FirstOrDefault();
    var filePath = "/upload/files/";
    try
    {
        File.WriteAllBytes(HttpContext.Current.Server.MapPath(filePath) + fileName, file);           
    }
    catch (Exception ex)
    {
        // ignored
    }

    return null;
}