从 .net core 2.2 移动到 3.1 后无法上传文件
Posted
技术标签:
【中文标题】从 .net core 2.2 移动到 3.1 后无法上传文件【英文标题】:Unable to upload file after moving from .netcore 2.2 to 3.1 【发布时间】:2020-06-12 04:46:07 【问题描述】:我有一个为上传文件而构建的服务。 有 2 个程序集:一个带有 ApiController,另一个带有逻辑。
控制器:
public async Task<UploadFileResponse> UploadFromUrl([Required] string url, [FromQuery] string policy = null)
return await _fileStorageService.UploadFromUrlAsync(url, policy);
还有业务:
public abstract class BaseFileStorageService<TOptions> : IFileStorageService
...
public async Task<UploadFileResponse> UploadFromUrlAsync(string url, string policyName = null, CancellationToken cancellationToken = default)
var fileName = Path.GetFileName(uri.LocalPath);
... //http request for the file
var fileDataStream = await downloadResponse.Content.ReadAsStreamAsync();
if (contentLength == null)
throw new Exception("File upload error");
var formFile = new FormFile(fileDataStream, 0, contentLength.Value, null, fileName)
Headers = new HeaderDictionary(),
ContentType = contentType
;
我添加了以下软件包:
Microsoft.AspNetCore.Http v.2.2.2 和 Microsoft.AspNetCore.Http.Features 2.2.0(我试过 3.1.2 但行为是一样的)
这两个项目都是使用 .net core 3.1 构建的。当前安装的版本是 3.1.102。
A 可以与控制器处的调试器中断,但是当我尝试进入业务逻辑时,我收到以下消息:
System.TypeLoadException: 'Could not load type 'Microsoft.AspNetCore.Http.Internal.FormFile' from assembly 'Microsoft.AspNetCore.Http, Version=3.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.'
我花了一天时间来解决这个问题。并且不知道如何使它工作。
可能是什么原因以及如何解决?
【问题讨论】:
【参考方案1】:这里是解决方案:https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#framework-reference
看来应该手动修复。
【讨论】:
以上是关于从 .net core 2.2 移动到 3.1 后无法上传文件的主要内容,如果未能解决你的问题,请参考以下文章
从 Body 迁移 .NET Core 2.2 到 3.1 集成测试始终为空
将项目从 2.2 更新到 3.1(缺少程序集)或如何在 .NET Core 中使用 API POST 请求时,PostAsJsonAsync()在 .Net Core 3.1 中不起作用 [重复]
从 2.2 迁移到 3.1 的 ASP.Net Core 解决方案在发布时不会运行
从 .NET Core 2.1 迁移到 .NET Core 3.1 后,publish 有问题