C# 使用HttpClient上传文件并附带其他参数的步骤

 更新时间:2020年12月14日 09:14:39   作者:傅小灰  
这篇文章主要介绍了C# 使用HttpClient上传文件并附带其他参数的步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

HttpClientMultipartFormDataContent(传送门)最低适用于.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# 三种方式实现Socket数据接收

    C# 三种方式实现Socket数据接收

    这篇文章主要给大家分享三种实现C# 实现Socket数据接收的方式,接下俩小编就来为大家详细介绍吧,需要的朋友可以参考一下
    2021-10-10
  • C#实现rabbitmq 延迟队列功能实例代码

    C#实现rabbitmq 延迟队列功能实例代码

    本篇文章主要介绍了C#实现rabbitmq 延迟队列功能实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • c#进度条 progressBar 使用方法的小例子

    c#进度条 progressBar 使用方法的小例子

    1、创建进度条窗口2、在其他窗口中调用方法ShowProcess(int percent,string message)
    2013-04-04
  • c#实现最简洁的快速排序(你绝对可以看懂)

    c#实现最简洁的快速排序(你绝对可以看懂)

    这篇文章主要给大家介绍了关于利用c#实现如何最简洁的快速排序,实现的方法你绝对可以看懂,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • c# 9.0新特性nint和Pattern matching的使用方法

    c# 9.0新特性nint和Pattern matching的使用方法

    这篇文章主要介绍了c# 9.0新特性nint和Pattern matching的使用方法,文中讲解非常细致,帮助你更好的学习c# 9.0,有需求的朋友可以参考下
    2020-06-06
  • C#验证身份证的函数

    C#验证身份证的函数

    因做项目需要,参考网上资料写了一个身份证验证的C#方法,本方法是在VS2005[C/S] 下写的。前面2个是网友们的实现方法,第三个才是项目中使用的哦,小伙伴们参考下吧。
    2015-05-05
  • C#实现排列组合算法完整实例

    C#实现排列组合算法完整实例

    这篇文章主要介绍了C#实现排列组合算法的完整实例,文中实例主要展示了排列循环方法和排列堆栈方法,需要的朋友可以参考下
    2014-09-09
  • 详细聊聊如何在C#循环中捕获局部变量

    详细聊聊如何在C#循环中捕获局部变量

    这篇文章主要给大家介绍了关于如何在C#循环中捕获局部变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • C#使用ZXing实现二维码和条形码的生成

    C#使用ZXing实现二维码和条形码的生成

    这篇文章主要为大家详细介绍了C#如何使用ZXing实现二维码和条形码的生成与识别,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C#自定义音乐播放器进度条

    C#自定义音乐播放器进度条

    这篇文章主要为大家详细介绍了C#自定义音乐播放器进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论