为FormFile实例设置ContentType时抛出NullReference异常
问题原因及解决方案
问题出在早期ASP.NET Core版本中,FormFile的构造函数不会自动初始化ContentDisposition属性,而ContentType的setter会直接访问ContentDisposition.MediaType,当ContentDisposition为null时就会抛出NullReference异常。
修复代码:
在设置ContentType之前,先手动初始化ContentDisposition:
private static IFormFile CreateTemporaryFile(string fileName, string contentType) { byte[] bytes = Encoding.UTF8.GetBytes("Test content"); var formFile = new FormFile( baseStream: new MemoryStream(bytes), baseStreamOffset: 0, length: bytes.Length, name: "Data", fileName: fileName); // 先初始化ContentDisposition,再设置ContentType formFile.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "Data", FileName = fileName }; formFile.ContentType = contentType; return formFile; }
另一种简化写法:
如果你使用的是ASP.NET Core 3.0及以上版本,也可以通过直接设置ContentDisposition的字符串形式来初始化:
formFile.ContentDisposition = $"form-data; name=\"Data\"; filename=\"{fileName}\""; formFile.ContentType = contentType;
这样就能避免NullReference异常,因为此时ContentDisposition已被正确初始化,ContentType的setter可以安全访问其MediaType属性。
内容的提问来源于stack exchange,提问作者RedRose
相关产品推荐
相关产品推荐

