点击.cshtml保存按钮触发异常及400错误排查求助
问题排查请求
点击.cshtml页面的保存按钮时,代码进入catch块抛出异常,浏览器控制台返回400(Bad Request)错误。
错误详情
异常信息:
YBS.Data.Classes.Errors.AddOperationCanceledException: 'SELECT * FROM AccessControlDoorOpenPersonnel WITH(NOLOCK) WHERE Id=0YBS.Models.DelayControlDoorOpenPersonnelModel model insert operation was canceled (DataVInsertMisAuthority=false)
请求报错:
jquery.min.js:4 POST http://localhost:4000/kapigecis/GecisKontrolKapiAcmaPersonelKaydet 400 (Bad Request)
前端代码
function Kaydet() { $('#formu').parsley().validate(); let valid = $('#formu').parsley().isValid(); let login = 0; if ($('#login').val() === "on") { login = 1; } if (valid) { let talep = { Id: parseInt($('#id').val()), KapiId: parseInt($('#kapiId').val()), KullaniciId: parseInt($('#kullaniciId').val()), FonksiyonTusu: $('#fonksiyonTusu').val(), Login: parseInt(login), } $.ajax({ url: baseUrl + "kapigecis/GecisKontrolKapiAcmaPersonelKaydet", headers: { 'Authorization': `Bearer ${token}`,'Content-Type': 'application/json' }, method: 'POST', cache: 'false', data: JSON.stringify(talep), success: function (data) { data = JSON.parse(data); if (data.length === 0) { Swal('Hata', 'Tanım organizasyon işlemi yapılamadı.', 'info'); return; } if (data) { toastr.success("Tanım organizasyon işlemi yapıldı"); } else { Swal('İşlem yapılamadı', data.message, 'error'); } $('#form1').modal("hide"); window.location.reload(); dt.draw(); }, error: function (data) { data = JSON.parse(data.responseText); Swal('Internal Server Error', data.message, 'error'); } }); } }
后端接口代码
[HttpPost("GecisKontrolKapiAcmaPersonelKaydet")] public IActionResult GecisKontrolKapiAcmaPersonelKaydet(GecisKontrolKapiAcmaPersonelKaydetModel model) { try { dynamic result = new JObject(); bool login = false; login = NewMethod(model, login); ControllerGecisKontrolKapiAcmaPersonel controllerGecisKontrolKapiAcmaPersonel = new ControllerGecisKontrolKapiAcmaPersonel(); controllerGecisKontrolKapiAcmaPersonel.KullaniciRowGuid = HttpContext.User.Identity.Name; controllerGecisKontrolKapiAcmaPersonel.Model = controllerGecisKontrolKapiAcmaPersonel.ModelOlustur(ModelSecenek.ModelListe.GecisKontrolKapiAcmaPersonel); GecisKontrolKapiAcmaPersonelModel gecisKontrolKapiAcmaPersonelModel = (GecisKontrolKapiAcmaPersonelModel)controllerGecisKontrolKapiAcmaPersonel.Model; controllerGecisKontrolKapiAcmaPersonel.Model.ModelYukle(model.Id); gecisKontrolKapiAcmaPersonelModel.GecisKontrolKapiTanimId = model.KapiId; gecisKontrolKapiAcmaPersonelModel.TanimKullaniciId = model.KullaniciId; gecisKontrolKapiAcmaPersonelModel.FonksiyonTusu = model.FonksiyonTusu; gecisKontrolKapiAcmaPersonelModel.Login = login; if (model.Id == 0) { controllerGecisKontrolKapiAcmaPersonel.Ekle(); } else { controllerGecisKontrolKapiAcmaPersonel.Guncelle(); } return Ok(true); } catch (Exception e) { AnaModelHariciMetotlari.SistemHataKaydet(e.Message, HttpContext.Request.RouteValues["controller"].ToString() + "->" + HttpContext.Request.RouteValues["action"].ToString(), HttpContext.User.Identity.Name, "WEB", JsonConvert.SerializeObject(model)); return BadRequest(new { id = 0, message = "Bir Hata Oluştu. Lütfen Tekrar Deneyiniz." }); } }
排查思路与解决路径
1. 权限验证问题
异常明确提到DataVInsertMisAuthority=false,说明插入操作因权限被拦截:
- 检查当前登录用户
HttpContext.User.Identity.Name是否拥有AccessControlDoorOpenPersonnel表的插入权限 - 核对后端
DataVInsertMisAuthority相关的权限校验逻辑,确认配置是否正确
2. 请求参数与模型映射问题
- 检查前端
talep对象字段与后端GecisKontrolKapiAcmaPersonelKaydetModel的匹配性:比如前端传的KapiId对应后端模型的GecisKontrolKapiTanimId,是否存在字段名不匹配导致参数绑定失败 - 校验前端
parseInt转换逻辑:如果表单中id、kapiId等值为空或非数字,parseInt会返回NaN,引发模型绑定异常,需在前端添加参数有效性校验
3. 数据库操作逻辑问题
- 插入新数据时(
model.Id==0),代码执行了SELECT * FROM AccessControlDoorOpenPersonnel WITH(NOLOCK) WHERE Id=0,检查ModelYukle方法逻辑:传入Id=0时是否错误执行查询而非初始化空模型 - 查看
Ekle()方法内部实现,确认插入SQL语句是否正确,是否存在非空字段未赋值等约束问题导致插入失败
4. 错误日志排查
后端SistemHataKaydet已记录详细错误信息,查看日志文件中的完整异常堆栈,直接定位出错代码行
5. 请求调试
- 使用Postman直接调用后端接口,传入模拟合法参数,验证接口本身是否能正常执行插入,排除前端参数传递问题
- 检查请求头中
Authorization令牌的有效性,确认用户是否有权限访问该接口
内容的提问来源于stack exchange,提问作者ebrua
相关产品推荐
相关产品推荐

