这篇文章主要介绍了C# 使用HttpClient上传文件并附带其他参数的步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
HttpClient和MultipartFormDataContent(传送门)最低适用于.NET Framework 4.5版本
发送端代码
using (HttpClient client = new HttpClient())
{
var content = new MultipartFormDataContent();
//添加字符串参数,参数名为qq
content.Add(new StringContent("123456"), "qq");
string path = Path.Combine(System.Environment.CurrentDirectory, "1.png");
//添加文件参数,参数名为files,文件名为123.png
content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "123.png");
var requestUri = "http://192.168.1.108:56852/api/Test/SaveFile";
var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
}
接收端代码
[HttpPost]
public async Task<JsonResult> SaveFile([FromForm]string qq, IFormFile file)
{
return await Task.Run(() =>
{
try
{
//保存文件到本地
var filefullPath = Path.Combine(Directory.GetCurrentDirectory(), file.FileName);
using (FileStream fs = new FileStream(filefullPath, FileMode.Create))
{
file.CopyTo(fs);
fs.Flush();
}
}
catch (Exception ex)
{
return Fail(file.FileName + "---" + ex.Message);
}
return Success();
});
}
注意:如果要通过参数形式接收数据,需要确保参数名称和上面发送请求中设置的名称一致,否则无法自动绑定到参数中,且需要给参数加上[FromForm]的标记。
使用model对象接收数据
public class SaveFileModel
{
public string qq { get; set; }
public IFormFile File { get; set; }
}
public async Task<JsonResult> SaveFile([FromForm]SaveFileModel model)
{
//......
}
使用HttpContext从请求的Form中获取数据
public async Task<JsonResult> SaveFile()
{
return await Task.Run(() =>
{
var files = HttpContext.Request.Form.Files;
var qq = HttpContext.Request.Form["qq"];
//......
});
}
总结
这个问题是在写一个.Net Core项目时遇到的,以前在.Net Framework 4.0的时候,使用string拼接表单中文件的内容,到处都是boundary分界线。用MultipartFormDataContent来进行表单提交上传文件是它内部帮我们拼接了这个复杂的内容。(可以用Fiddler抓一下请求看看)emm...我去找一下当初是怎么弄的文件上传,如果有再更新此文。
以上就是C# 使用HttpClient上传文件并附带其他参数的步骤的详细内容,更多关于C# 使用HttpClient上传文件的资料请关注得得之家其它相关文章!
沃梦达教程
本文标题为:C# 使用HttpClient上传文件并附带其他参数的步骤
基础教程推荐
猜你喜欢
- C语言植物大战数据结构二叉树递归 2023-04-09
- 纯C++代码详解二叉树相关操作 2023-05-15
- 利用QT设计秒表功能 2023-05-30
- VisualStudio2010安装教程 2023-01-05
- C语言数组长度的计算方法实例总结(sizeof与strlen) 2023-04-26
- Qt数据库应用之实现通用数据库请求 2023-03-18
- g++: const 丢弃限定符 2022-10-07
- character-encoding – Linux中最常见的C语言编码(和Unix?) 2023-11-21
- 05-C语言进阶——动态内存管理 2023-11-20
- C语言的三种条件判断语句你都了解吗 2023-03-05
