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# WebApi CORS跨域问题解决方案

    C# WebApi CORS跨域问题解决方案

    本篇文章主要介绍了C# WebApi CORS跨域问题解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • C#实现Json转DataTable并导出Excel的方法示例

    C#实现Json转DataTable并导出Excel的方法示例

    这篇文章主要介绍了C#实现Json转DataTable并导出Excel的方法,结合实例形式总结分析了Json转换DataTable,以及DataTable导出Excel相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • C#使用Monitor类实现线程同步

    C#使用Monitor类实现线程同步

    这篇文章介绍了C#使用Monitor类实现线程同步的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C# 8.0可空引用类型的使用注意记录

    C# 8.0可空引用类型的使用注意记录

    这篇文章主要给大家介绍了关于C# 8.0可空引用类型使用注意的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 详解WPF中的APP生命周期以及全局异常捕获

    详解WPF中的APP生命周期以及全局异常捕获

    这篇文章主要为大家详细介绍了WPF中的APP生命周期以及全局异常捕获的相关资料,文中的示例代码讲解详细,对我们学习WPF有一点的帮助,需要的可以了解一下
    2023-03-03
  • C#数据类型转换(显式转型、隐式转型、强制转型)

    C#数据类型转换(显式转型、隐式转型、强制转型)

    本文详细讲解了C#数据类型转换(显式转型、隐式转型、强制转型),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • c#制作简单启动画面的方法

    c#制作简单启动画面的方法

    这篇文章主要介绍了c#制作简单启动画面的方法,涉及C#实现桌面程序启动画面的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#加密算法汇总(推荐)

    C#加密算法汇总(推荐)

    以下是对C#中的加密算法进行了汇总介绍,需要的朋友可以过来参考下
    2013-09-09
  • C#中char和string的入门使用教程

    C#中char和string的入门使用教程

    这篇文章主要给大家介绍了关于C#中char和string的入门使用教程,文中通过示例代码以及图文介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • C#实现简单过滤非法字符实例

    C#实现简单过滤非法字符实例

    这篇文章主要介绍了C#实现简单过滤非法字符的方法,涉及C#针对字符串遍历与判断的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-11-11

最新评论