C# aspnetboilerplate自定义验证引发异常
我正在一个.Net核心项目中使用框架。接下来,我对视图模型进行了自定义验证 首先,我有一个带有自定义验证的简单视图模型:C# aspnetboilerplate自定义验证引发异常,c#,validation,asp.net-core,aspnetboilerplate,C#,Validation,Asp.net Core,Aspnetboilerplate,我正在一个.Net核心项目中使用框架。接下来,我对视图模型进行了自定义验证 首先,我有一个带有自定义验证的简单视图模型: public class EditPropertyViewModel : ICustomValidate { public long Id { get; set; } public long? ParentId { get; set; } public string Title { get; set; }
public class EditPropertyViewModel : ICustomValidate
{
public long Id { get; set; }
public long? ParentId { get; set; }
public string Title { get; set; }
public void AddValidationErrors(CustomValidationContext context)
{
if (Id == ParentId)
context.Results.Add(new ValidationResult("Property cannot be parent of itself!", new [] { "ParentId" } ));
}
}
那么我的控制器是这样的:
[HttpPost]
public async Task<IActionResult> Edit(EditPropertyViewModel model)
{
if (ModelState.IsValid)
{
/* Update property here and return */
}
return View(model);
}
[HttpPost]
公共异步任务编辑(EditPropertyViewModel模型)
{
if(ModelState.IsValid)
{
/*在此处更新属性并返回*/
}
返回视图(模型);
}
但当我运行项目时,出现了以下异常:
AbpValidationException:方法参数无效!有关详细信息,请参阅ValidationErrors
这意味着我的自定义验证已在ModelState.IsValid之前执行,没有机会处理该异常并向用户显示用户友好的消息。通过[DisableValidation]禁用验证会跳过此异常,但也会跳过我的验证逻辑。我还尝试使用.NET的标准IValidatableObject接口代替abp的ICustomValidate,但这并没有帮助我解决问题。验证就是这样工作的。不,验证不应该引发异常。它应该向ModelState添加错误消息。现在无法处理此异常。请阅读您链接的文档。我已经阅读了。其他人有这个问题没有解决。看这里:问题解决了。验证就是这样工作的。不,验证不应该抛出异常。它应该向ModelState添加错误消息。现在无法处理此异常。请阅读您链接的文档。我已经阅读了。其他人有这个问题没有解决。看这里:问题解决了。