Csharp/C#教程:如何使用.Net 4.0中包含的HttpClient类将文件上传到IIS Express中运行的Asp.Net MVC 4.0操作分享


如何使用.Net 4.0中包含的HttpClient类将文件上传到IIS Express中运行的Asp.Net MVC 4.0操作

我有一个C / S应用程序。 我使用Asp.Net MVC 4.0实现了服务器,客户端运行在.Net 4.5上。

我在服务器端有一个Controller Action,如下所示:

public JsonResult Upload(string arg1, int arg2) { //do something about arg1 and arg2 here ... var files = Request.Files; if (files.Count > 0) { foreach(var file in files) { var ms = new MemoryStream(); file.InputStream.CopyTo(ms); //save it to somewhere ... } } ... } 

我创建了一个测试html页面,在浏览器中测试它。 它按预期工作。

在客户端,我使用HttpClient类,它在没有文件上传的情况下工作得很好。 然而,经过几天的研究,我仍然没有运气在运行IIS Express的调试机器中解决这个问题。 我发现所有线索都会导致MultipartFormDataContent ,但仍然无法使其工作,即使我复制这些示例代码,服务器端仍然无法获取任何东西,所有args都是空的,并且Request.Files没有文件Request.Files 。 我曾经拥有自己的基于HttpWebRequest的http助手类,它适用于文件上传,但我更喜欢在这个新项目中使用HttpClient。

那么,如何使用HttpClient将文件上传到服务器?

在使用Fiddler调试后,将原始http消息与WinMerge进行比较,我发现Firefox和我的程序之间存在差异:

Firefox(删除了一些标题以简化操作):

 POST https://localhost:53400/Input/Upload HTTP/1.1 Host: localhost:53400 Content-Type: multipart/form-data; boundary=---------------------------1590871622043 Content-Length: **** -----------------------------1590871622043 Content-Disposition: form-data; name="arg1" abc -----------------------------1590871622043 Content-Disposition: form-data; name="arg2" 3 -----------------------------1590871622043 Content-Disposition: form-data; name="uploadfile"; filename="wave.wav" Content-Type: audio/wav //file data here -----------------------------1590871622043-- 

我的程序与MultipartFormDataContent

 POST https://localhost:53400/Input/Save HTTP/1.1 Content-Type: multipart/form-data; boundary="caac5ea7-8ab4-4682-be40-ecb3ddf3e70a" Host: localhost:53400 Content-Length: **** --caac5ea7-8ab4-4682-be40-ecb3ddf3e70a Content-Disposition: form-data; name=arg1 abc --caac5ea7-8ab4-4682-be40-ecb3ddf3e70a Content-Disposition: form-data; name=arg2 3 --caac5ea7-8ab4-4682-be40-ecb3ddf3e70a Content-Disposition: form-data; name=uploadfile; filename=wave.wav; filename*=utf-8''wave.wav //file data here --caac5ea7-8ab4-4682-be40-ecb3ddf3e70a-- 

我要注意的最后一件事是,在这些Content-Disposition行中,Firefox会引用所有值,但我的程序却没有。 人们可以很容易地认为这没关系,但最后,我发现这是确切的原因。

现在我知道原因了,这里有代码可以使用,就像引用名称一样简单:

上述就是C#学习教程:如何使用.Net 4.0中包含的HttpClient类将文件上传到IIS Express中运行的Asp.Net MVC 4.0操作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var multipart = new MultipartFormDataContent(); multipart.Add(new StringContent("abc"), '"' + "arg1" + '"'); multipart.Add(new StringContent("3"), '"' + "arg2" + '"'); // byte[] fileData; multipart.Add(new ByteArrayContent(fileData), '"' + "uploadfile"+ '"', '"' + "wave.wav" + '"'); //HttpClient http; string url; var response = await http.PostAsync(url, multipart); response.EnsureSuccessStatusCode(); //... 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954136.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐