.net4.6 没有可用的 MediaTypeFormatter,无法从媒体类型为“multipart/form-data”的内容中读取类型为“HttpPostedFileBase”的对象
时间: 2024-11-25 16:21:43 浏览: 4
在.NET Framework 4.6及更早版本中,`MediaTypeFormatter` 的支持确实有限,尤其是在处理复杂的内容类型如 `multipart/form-data` 时。`HttpPostedFileBase` 类型是在旧版本的 ASP.NET 中用来存储上传文件的数据,它通常由表单提交(POST)请求携带。
当你尝试从这样的请求体解析 `multipart/form-data` 时,可能会遇到困难,因为默认情况下 .NET 4.6 不提供内置的 `MediaTypeFormatter` 来自动识别并序列化这些复杂的格式。在这种情况下,你需要手动配置或使用第三方库来帮助解析。
一种解决方案是使用 `System.Net.Http.Formatting` 命名空间中的 `MultipartFormDataStreamProvider`,这是一个用于读取 `multipart/form-data` 内容的类,它可以让你访问到每个单独的部分,包括那些作为 `HttpPostedFileBase` 对象的文件部分。
另一个选择是引入像 `Microsoft.AspNetCore.WebUtilities`(在 ASP.NET Core 项目中)或 `WebApiContrib.Formatting.Multipart` 这样的库,它们提供了对 `.NET 4.x` 更友好的 `multipart/form-data` 解析功能。
以下是如何使用 `MultipartFormDataStreamProvider` 的示例:
```csharp
using System.IO;
using Microsoft.AspNetCore.Http;
// ...
public async Task<IActionResult> ProcessForm([FromForm] MultipartFormDataStreamProvider provider)
{
foreach (var file in provider.Files)
{
HttpPostedFileBase postedFile = await file.ReadAsAsync<HttpPostedFileBase>();
// 处理文件逻辑
}
// 接下来的业务逻辑
}
```
阅读全文