过去三天,我一直在努力将复杂类型的序列化json (称为fileItem
的DTO对象)和名为文件的IFormFile
类型发送到我的API中的一个,它接受两个输入,一个FileItem
对象和IFormFile
对象。
但是我一直收到一个错误“不支持的媒体类型”。请注意,当我只发送文件或仅将对象发送到API端点时,通过更新端点以只接受文件或只接受complexType,那么它可以正常工作,但如果同时发送这两个文件,则会得到“不支持的媒体类型”错误,该错误在我发送的请求中已经可用
请指导我正确的方向,你的帮助将是非常感谢的。
ASP.NET MVC web应用程序
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的请求)。
[HttpPost()]
[Route("SaveFileWithData")]
public async Task<string> SaveFileWithData(FileItem? fileItem, IFormFile? file)
{
int i = 2;
return "fileSavedSuccessfully";
}
发布于 2022-08-24 03:44:56
下面是一个您可以遵循的完整的工作演示:
型号:
public class FileItem
{
public string FileName { get; set; }
public string Type { get; set; }
}
MVC:
[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:
[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
https://stackoverflow.com/questions/73454461
复制相似问题