Razor页面应用中Ajax上传文件返回400错误,求问题排查
Razor页面文件上传400错误排查修复
以下是可能导致400错误的原因及对应修复方案:
1. 防伪令牌验证失败
Razor页面默认强制验证AntiForgeryToken,你的JS中@GetAntiXsrfToken()可能未正确生成有效令牌。推荐改用页面内置的防伪令牌:
- 在页面添加隐藏令牌输入:
@Html.AntiForgeryToken()
- 修改JS中令牌获取方式:
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }
2. 表单默认提交行为未阻止
submit按钮点击后会触发表单默认提交,导致AJAX请求被干扰。修改如下:
- 调整JS函数,阻止默认行为并添加空文件校验:
function showUploadResult(event) { event.preventDefault(); var files = $('#myFile').prop("files"); if (files.length === 0) { alert("请选择文件后再提交"); return false; } var url = "/Index?handler=UploadCustomerSuccessBonus"; var formData = new FormData(); formData.append("CustomerSuccessBonus", files[0]); $.ajax({ type: 'POST', url: url, data: formData, cache: false, contentType: false, processData: false, headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }, success: function () { alert("上传成功"); }, error: function () { alert("上传出错"); } }); return false; }
- 更新按钮的onclick绑定:
<input type="submit" onclick="return showUploadResult(event)">
3. 参数匹配与后台逻辑补充
- 确保FormData的键名
CustomerSuccessBonus和后台方法参数名完全一致(大小写敏感),当前代码已匹配,但需避免拼写错误。 - 后台可添加日志或判断,排查文件接收情况:
public IActionResult OnPostUploadCustomerSuccessBonus(IFormFile CustomerSuccessBonus) { if (CustomerSuccessBonus != null && CustomerSuccessBonus.Length > 0) { // 此处添加文件处理逻辑 return Page(); } return BadRequest("未接收到有效文件"); }
内容的提问来源于stack exchange,提问作者Linda G
相关产品推荐
相关产品推荐

