C# 使用HttpClient上传文件并附带其他参数的步骤
HttpClient和MultipartFormDataContent(传送门)最低适用于.NETFramework4.5版本
发送端代码
using(HttpClientclient=newHttpClient()) { varcontent=newMultipartFormDataContent(); //添加字符串参数,参数名为qq content.Add(newStringContent("123456"),"qq"); stringpath=Path.Combine(System.Environment.CurrentDirectory,"1.png"); //添加文件参数,参数名为files,文件名为123.png content.Add(newByteArrayContent(System.IO.File.ReadAllBytes(path)),"file","123.png"); varrequestUri="http://192.168.1.108:56852/api/Test/SaveFile"; varresult=client.PostAsync(requestUri,content).Result.Content.ReadAsStringAsync().Result; Console.WriteLine(result); }
接收端代码
[HttpPost] publicasyncTaskSaveFile([FromForm]stringqq,IFormFilefile) { returnawaitTask.Run(()=> { try { //保存文件到本地 varfilefullPath=Path.Combine(Directory.GetCurrentDirectory(),file.FileName); using(FileStreamfs=newFileStream(filefullPath,FileMode.Create)) { file.CopyTo(fs); fs.Flush(); } } catch(Exceptionex) { returnFail(file.FileName+"---"+ex.Message); } returnSuccess(); }); }
注意:如果要通过参数形式接收数据,需要确保参数名称和上面发送请求中设置的名称一致,否则无法自动绑定到参数中,且需要给参数加上[FromForm]的标记。
使用model对象接收数据
publicclassSaveFileModel { publicstringqq{get;set;} publicIFormFileFile{get;set;} } publicasyncTaskSaveFile([FromForm]SaveFileModelmodel) { //...... }
使用HttpContext从请求的Form中获取数据
publicasyncTaskSaveFile() { returnawaitTask.Run(()=> { varfiles=HttpContext.Request.Form.Files; varqq=HttpContext.Request.Form["qq"]; //...... }); }
总结
这个问题是在写一个.NetCore项目时遇到的,以前在.NetFramework4.0的时候,使用string拼接表单中文件的内容,到处都是boundary分界线。用MultipartFormDataContent来进行表单提交上传文件是它内部帮我们拼接了这个复杂的内容。(可以用Fiddler抓一下请求看看)emm...我去找一下当初是怎么弄的文件上传,如果有再更新此文。
以上就是C#使用HttpClient上传文件并附带其他参数的步骤的详细内容,更多关于C#使用HttpClient上传文件的资料请关注毛票票其它相关文章!