c# - 如何在 API 中接收 MultipartFormDataContent?
问题描述
网络核心应用。我有一个休息 API,它将文件发送到另一个 API。
下面是第一个 API 内部将文件发送到第二个 API 的逻辑。
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await _tokenService.GetToken());
MultipartFormDataContent multipartFormData = new MultipartFormDataContent();
string contentJson = JsonConvert.SerializeObject(request);
HttpContent data = new StringContent(contentJson, Encoding.UTF8, "application/json");
multipartFormData.Add(data, "data");
foreach (var file in fileList)
{
if (file.Length <= 0)
continue;
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
multipartFormData.Add(new StreamContent(file.OpenReadStream())
{
Headers =
{
ContentLength = file.Length,
ContentType = new MediaTypeHeaderValue(file.ContentType)
}
}, "File", fileName);
}
try
{
var response = await client.PostAsync("https://localhost:44370/apisendfile", multipartFormData);
}
catch (Exception ex)
{
}
}
我有如下第二个 API
public async Task<ActionResult> SendMail([FromBody] MultipartFormDataContent formDataContent)
{
}
当我在我的第一个 API 中调试时,我收到错误
不支持的媒体类型
我一直在尝试弄清楚但无法成功。有人可以帮我确定这个问题。任何帮助,将不胜感激。谢谢
解决方案
嗯,你可以试试下面的方法,
Web API 控制器:
[HttpPost]
public string UploadMultipartFile()
{
var file = HttpContext.Current.Request.Files.Count > 0 ?
HttpContext.Current.Request.Files[0] : null;
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(
HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
fileName
);
file.SaveAs(path);
}
return file != null ? "/MrPerfectMaltipartFolder/" + file.FileName : null;
}
文件夹位置:
在 Post Man 上测试:
打开文件夹位置:
上传的文件:
对于 N 类型的分段数据上传:
[HttpPost]
public object UploadMultipartFileList()
{
var uploadedFilesName = new List<string>();
if (HttpContext.Current.Request.Files.Count > 0)
{
int count = 0;
foreach (var item in HttpContext.Current.Request.Files)
{
var getFile = HttpContext.Current.Request.Files[count];
if (getFile != null)
{
var fileName = Path.GetFileName(getFile.FileName);
var path = Path.Combine(
HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
fileName
);
getFile.SaveAs(path);
}
count++;
string file = "/MrPerfectMaltipartFolder/" + getFile.FileName;
uploadedFilesName.Add(file);
}
}
return uploadedFilesName;
}
输出:
数据和文件示例:
[HttpPost]
public object UploadMultipartFileList()
{
HttpRequest multipartRquest = HttpContext.Current.Request;
//General Data Part
string engineerName = multipartRquest.Form["EngineerName"];
string engineerEmail = multipartRquest.Form["EngineerEmail"];
//File Upload Part
var FilesName = new List<string>();
if (HttpContext.Current.Request.Files.Count > 0)
{
int count = 0;
foreach (var item in HttpContext.Current.Request.Files)
{
var getFile = HttpContext.Current.Request.Files[count];
if (getFile != null)
{
var fileName = Path.GetFileName(getFile.FileName);
var path = Path.Combine(
HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
fileName
);
getFile.SaveAs(path);
}
count++;
string file = "/MrPerfectMaltipartFolder/" + getFile.FileName;
FilesName.Add(file);
}
}
return FilesName;
}
请求格式:
输出:
希望它能解决你的问题。如果您仍然遇到任何问题,请随时分享。
推荐阅读
- java - Crosswalk 在 API 级别 26 中返回“Crosswalk 的 API 尚未准备好”
- excel - 将图像插入单元格
- pentaho - 阻塞步骤与阻塞此步骤,直到 Pentaho 转换中的步骤完成
- ruby - 将 RSpec 作为 Rake 任务运行有什么好处
- html - 如何覆盖引导字体系列?
- python - 我对 ExclusiveMinimum 属性的实现是否正确?
- c++ - Qt C++ 创建一个方形音频音波。播放并保存
- angular - Angular 条件事件绑定
- python - 无法在我的 python 3.6 windows 10 中成功安装 Basemap
- ios - AR 参考图像平面在 iOS Swift 中的位置不正确?