.NET Core MVC实现XSD文件上传时IDE提前崩溃问题求助
.NET Core MVC XSD文件上传IDE崩溃问题修复方案
崩溃核心原因
你当前的代码存在Razor标签助手类型绑定不兼容问题:前端type="file"的输入控件通过asp-for绑定了后端模型中string类型的xsddata属性,ASP.NET Core设计时实时校验时触发未处理异常,直接导致IDE崩溃。
分步修复方案
1. 修正模型类定义
拆分文件接收属性和入库存储属性,避免类型不匹配:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.AspNetCore.Http; public class cat { [Key] public int catid { get; set; } public string catname { get; set; } // 存储入库的文件路径/文件名 public string xsddata { get; set; } // 临时接收上传文件,不映射到数据库表 [NotMapped] public IFormFile xsddataFile { get; set; } }
2. 修正前端表单配置
同步修改提交目标和文件输入绑定属性:
<form asp-action="Upload" enctype="multipart/form-data" method="post"> <input asp-for="catname" class="form-control" /> <input type="file" asp-for="xsddataFile" class="form-control" /> <input type="submit" value="Create" class="btn btn-primary" /> </form>
3. 修正控制器上传逻辑
接收绑定的完整模型,处理文件保存和数据入库:
[HttpPost] public async Task<IActionResult> Upload([FromForm] cat model) { // 校验文件有效性 if (model.xsddataFile == null || model.xsddataFile.Length == 0) return BadRequest("请选择有效的XSD文件"); var path = Startup.myAppPath(); if (!Directory.Exists(path)) Directory.CreateDirectory(path); var fileName = Path.GetFileName(model.xsddataFile.FileName); var fullSavePath = Path.Combine(path, fileName); if (!System.IO.File.Exists(fullSavePath)) { using (var fileStream = new FileStream(fullSavePath, FileMode.Create)) { await model.xsddataFile.CopyToAsync(fileStream); } // 存储文件路径到入库属性,仅存文件名直接赋值fileName即可 model.xsddata = fullSavePath; // 此处补充你自己的数据库保存逻辑即可 return Ok(new { FileName = fileName, SavePath = fullSavePath }); } return BadRequest("当前文件已存在于服务器"); }
其他注意事项
- 确保项目已引用
Microsoft.AspNetCore.Http包,否则IFormFile类型会报错 - 如果仅需要存储相对路径,替换
fullSavePath为你需要的相对路径格式即可
内容的提问来源于stack exchange,提问作者Stefan Reuter
相关产品推荐
相关产品推荐

