首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在HttpClient 6.0中发送json对象和IFormFile时,IFormFile返回不支持的媒体类型错误

在HttpClient 6.0中发送json对象和IFormFile时,IFormFile返回不支持的媒体类型错误
EN

Stack Overflow用户
提问于 2022-08-22 23:06:45
回答 1查看 99关注 0票数 1

过去三天,我一直在努力将复杂类型的序列化json (称为fileItem的DTO对象)和名为文件的IFormFile类型发送到我的API中的一个,它接受两个输入,一个FileItem对象和IFormFile对象。

但是我一直收到一个错误“不支持的媒体类型”。请注意,当我只发送文件或仅将对象发送到API端点时,通过更新端点以只接受文件或只接受complexType,那么它可以正常工作,但如果同时发送这两个文件,则会得到“不支持的媒体类型”错误,该错误在我发送的请求中已经可用

请指导我正确的方向,你的帮助将是非常感谢的。

ASP.NET MVC web应用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public async Task<string> SaveFiles(FileItem _fileItem2, IFormFile _file)
{
    using (var multipartFormContent = new MultipartFormDataContent())
    {
        var fileItem = new StringContent(
        JsonSerializer.Serialize(_fileItem2), Encoding.UTF8, Application.Json);
        multipartFormContent.Add(fileItem, "fileItem");

        // Add the file
        var fileStreamContent = new StreamContent(_file.OpenReadStream());
        fileStreamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(_file.ContentType);
        multipartFormContent.Add(fileStreamContent, name: "file", _file.FileName);

        // Method 1 : this method returns Unsupported media type, but if file is removed then it works fine.
        var response = await httpClient.PostAsync("/Upload/SaveFileWithData", multipartFormContent);

        // Method 2 : this method also returns Unsupported media type, but if file is removed then it works fine.
        var request = new HttpRequestMessage(HttpMethod.Post, "/Upload/SaveFileWithData");
        request.Content = multipartFormContent;
        var responsemsg = await httpClient.SendAsync(request);

        responsemsg.EnsureSuccessStatusCode();

        return await responsemsg.Content.ReadAsStringAsync();
    }
}

这是.NET 6.0WebAPI(上面我们发送给这个API的请求)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost()]
[Route("SaveFileWithData")]
public async Task<string> SaveFileWithData(FileItem? fileItem, IFormFile? file)
{
    int i = 2;
    return "fileSavedSuccessfully";
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-23 19:44:56

下面是一个您可以遵循的完整的工作演示:

型号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FileItem
{
    public string FileName { get; set; }
    public string Type { get; set; }
}

MVC:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]
public async Task<string> SaveFiles(FileItem _fileItem2, IFormFile _file)
{
    HttpClient httpClient = new HttpClient();
    httpClient.BaseAddress = new Uri("https://localhost:7241/");
    using (var multipartFormContent = new MultipartFormDataContent())
    {

        multipartFormContent.Add(new StringContent(_fileItem2.FileName), "FileName");
        multipartFormContent.Add(new StringContent(_fileItem2.Type), "Type");

        var fileStreamContent = new StreamContent(_file.OpenReadStream());
        
        multipartFormContent.Add(fileStreamContent, name: "file", _file.FileName);

        var response = await httpClient.PostAsync("/Upload/SaveFileWithData", multipartFormContent);

        //...
    }
}

网络APi:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost()]
[Route("SaveFileWithData")]
public async Task<string> SaveFileWithData([FromForm]FileItem? fileItem, [FromForm] IFormFile? file)
{
    int i = 2;
    return "fileSavedSuccessfully";
}

注意:非空属性必须是ASP.NET 6中的,确保您通过HttpClient发布了所有属性,否则您将收到400个坏请求。

如果不需要所需的所有属性,可以检查下面的引用:https://stackoverflow.com/a/71701358/11398810

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73454461

复制
相关文章
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
   在需要通过服务端请求传递文件二进制文件流数据到相关的服务端保存时,如对接第三方接口很多情况下都会提供一个上传文件的接口,但是当你直接通过前端Ajax的方式将文件流上传到对方提供的接口的时候往往都会存在跨域的情况,这时候我们就需要通过服务端提交文件流来解决这个跨域的情况。本篇的主角就是使用HttpClient进行Http请求,提交二进制文件流到文件服务器中。
追逐时光者
2021/06/11
3.5K0
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
HttpClient 发送get请求并返回Json数据
一、以百度百科接口为例 http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&
week
2018/08/24
3.2K0
HttpClient 发送get请求并返回Json数据
HttpClient 发送Json
import com.fasterxml.jackson.databind.ObjectMapper; import msxf.model.People; import msxf.until.ImpalaJdbc; import msxf.until.NowDate; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.http.HttpS
shengjk1
2018/10/24
2.3K0
童鞋,[HttpClient发送文件的技术实践]请查收
之前我写了一个《ABP小试牛刀之上传文件》,主要体现的是服务端,上传文件的动作是由前端小姐姐完成的, 我还真没有用HttpClient编程方式发送过文件。
有态度的马甲
2021/12/21
7810
童鞋,[HttpClient发送文件的技术实践]请查收
【译】.NET 7 预览版 1 中的 ASP.NET Core 更新
.NET 7 预览版 1 现已推出!这是 .NET 下一个主要版本的第一个预览版,其中将包括使用 ASP.NET Core 进行 Web 开发的下一波创新。
郑子铭
2022/03/08
4K0
【译】.NET 7 预览版 1 中的 ASP.NET Core 更新
批量单聊消息发送时,没有返回发送失败的账户和错误码,不回调
我要向(“a”, "b")两个个用户发送批量单聊消息,如果a账户存在(已登录过IM或已导入),而b账户不存在,通过REST API发送,并没有返回b发送失败的信息,而是返回OK,并没有文档中所说的ErrorList字段,如下
用户6968426
2020/02/19
2.5K1
批量单聊消息发送时,没有返回发送失败的账户和错误码,不回调
Golang 函数返回类型是接口时返回对象的指针还是值
Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。
恋喵大鲤鱼
2019/06/14
8.1K0
C# HttpClient 请求认证、数据传输笔记
客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 Basic 、JWT、Cookie。
痴者工良
2021/04/26
2.5K0
win10 uwp 使用 asp dotnet core 做图床服务器客户端 服务器端客户端
本文告诉大家如何在 UWP 做客户端和 asp dotnet core 做服务器端来做一个图床工具
林德熙
2019/03/13
2.7K0
win10 uwp 使用 asp dotnet core 做图床服务器客户端
            服务器端客户端
httpclient post发送json数组并解决json乱码问题
业务: 客户端发送json数据,服务端进行解析 client发送json格式: {"data":[{"name":"1;,a","id_no":"222,a","cellphone":"123141a","abode_detail":"213,a","emp_add":"werew3a","app_no":"111111111111a","create_time":"11a"},{"name":"张三","id_no":"null","cellphone":"null","abode_detai
shengjk1
2018/10/24
4.2K0
用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是需要的源码: https://pan.baidu.com/s/1Eqc4MRiQDwOHmu0O
solenovex
2018/03/29
2.9K0
用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
在用httpclient发送post请求错误解决
在网上查询了很多。发现有些人说是jar冲突导致的,删除低版本的就可以了。可是我的没有jar冲突问题。所以想是不是因为jar版本低的原因。于是就换版本。
凯哥Java
2022/12/14
1.1K0
在用httpclient发送post请求错误解决
ASP.NET Core 给上传的图片加水印
图片加水印是网站中使用非常广泛的技术,可以保护网站内容的版权,例如我博客这样的网站。在传统ASP.NET(.NET Framework)中,我们可以使用System.Web.Helpers.WebImage来添加水印,就像这样:
Edi Wang
2019/07/08
2.9K0
ASP.NET Core 给上传的图片加水印
Php如何返回json数据(返回json对象或json格式数据)
header(‘Content-Type:application/json; charset=utf-8’);
超级小可爱
2023/02/20
17K0
ASP.NET Core文件上传与下载(多种上传方式)
官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads
GuZhenYin
2018/07/31
3.7K0
ASP.NET Core文件上传与下载(多种上传方式)
ASP.NET Core文件上传与下载(多种上传方式)
前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经很成熟了.下个项目争取使用吧. 正文 1.使用模型绑定上传文件(官方例子) 官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads 这里吐槽一下 - -,这TM的机器翻译..还不如自己看E文的.. 首先我们需要
GuZhenYin
2018/03/30
5.7K0
ASP.NET Core文件上传与下载(多种上传方式)
Abp小试牛刀之 图片上传
1. 上传图片要使用WebAPI特定媒体类型:multipart/form-data; 2. 因为要做图片预览,故在上传时利用AbpCache做一个临时缓存,返回图片Id; 3. 前端利用FileReader渲染预览图; 4. [确定]: 发起持久化WebAPI(利用第2步返回的图片Id)
有态度的马甲
2021/01/05
1.2K0
DTO返回JSON时,不展示某字段;DTO返回JSON时,更改某展示字段的key
//DTO返回JSON时,不展示某字段 @JsonIgnore private String addresses; //DTO返回JSON时,更改某展示字段的key @JsonProperty(value = "addresses") public final CalendarVideoAddressDTO getAddressesJSON() { if (addresses != null) { return JSONObject.pars
qubianzhong
2019/04/22
2.3K0
ASP.NET Core教程【三】实体字段属性、链接标签、并发数据异常、文件上传及读取
前文索引: ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证 ASP.NET Core教程【一】关于Razor Page的知识 实体字段属性 再来看看我们的实体类 public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [Da
liulun
2018/01/12
1.6K0
MyBatis在insert插入对象时,返回自增主键
useGeneratedKeys="true"(默认是false) keyProperty="id" 3: keyProperty 这个设置的是 你传入对象的属性名,不是你数据表的字段
星辰sea
2022/10/29
2.2K1
MyBatis在insert插入对象时,返回自增主键

相似问题

IFormFile从HttpClient调用返回空

13

RestClient发送IFormFile

10

如何计算IFormFile对象的校验和

20

发布IFormFile时的错误请求(400)

40

不支持'Microsoft.AspNetCore.Http.IFormFile.Headers‘上的集合类型’Microsoft.AspNetCore.Http.IFormFile.Headers‘

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文