ASP.NET Core 5 Web API报400错误是否与两项目访问同一数据库有关
解答
你的猜测不成立。请求未进入接口逻辑就返回400,说明报错发生在ASP.NET Core解析请求的前置阶段,还没有执行到访问数据库的代码,和你运行过其他项目访问同数据库无关。
该错误是表单数据解析失败触发的,可按以下步骤排查解决:
- 调整请求大小限制
ASP.NET Core默认表单提交大小限制为4MB,若上传的图片超过该阈值就会触发解析错误。可以直接在接口上添加特性调整限制:
[HttpPut("{id}")] // 示例为设置100MB限制,可按需调整大小 [RequestSizeLimit(100 * 1024 * 1024)] [RequestFormLimits(MultipartBodyLengthLimit = 100 * 1024 * 1024)] public async Task<ActionResult<HomeContextModel>> EditHomeContext(int id, string title, string context, string subcontext, IFormFile imageFile)
也可以全局配置,在Startup.cs的ConfigureServices方法中添加:
services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 100 * 1024 * 1024; });
- 排查PUT请求解析问题
部分.NET Core版本对PUT类型的multipart/form-data请求存在解析bug,你可以临时将接口请求类型改为POST测试,如果POST请求正常,可选择改接口请求方式,或者升级ASP.NET Core运行时到最新小版本修复该问题。 - 本地测试排除隧道影响
你代码中使用了conveyor.cloud穿透隧道,这类工具普遍存在上传大小限制,网络不稳定时还会截断请求导致表单不完整。你可以直接用localhost本地地址测试,不走隧道,如果本地测试正常,说明是隧道的问题,演示时直接用本地服务即可,或者更换支持大文件上传的穿透工具。 - 检查Swagger测试参数
用Swagger测试时要确保所有必填参数都填写完整,上传的文件没有损坏,不要在上传过程中中断操作,避免提交的表单数据不完整。
内容的提问来源于stack exchange,提问作者jackshooter
相关产品推荐
相关产品推荐

