使用过滤器属性验证模型
Validate a model with filter Attribute
出于 DRY 的原因,我正在练习属性验证,但我得到了一些 Web 示例 Api,我不知道是否有办法 return 具有无效数据的视图和API.
中使用的模型状态错误而不是 BadRequestObjectResult
我看过官方文档,但是我不明白它在视图的情况下是如何实现的。
我正在使用具有 2 个输入的基本模型在 EF 核心实体中添加数据来测试此属性过滤器。我的 objective 得到了一些通用的东西,因为我理解它适用于 Web Api。
在此先感谢您能给我的任何帮助。
我想在 IActionResult 中更改它:
if(!ModelState.IsValid)
return View(ModelState)
类似于此属性 class:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
// I know that this line indicates a BadRequestObjectResult
// but I don't know how to returning like view if
// the Web App use razor pages
context.Result = new BadRequestObjectResult(context.ModelState);
}
base.OnActionExecuting(context);
}
这是示例的实际响应(但我想使用 MVC 页面来 return 错误和模型数据):
{ "LastName":["The LastName field is required."],"FirstName":["The FirstName"]}
如果您要创建验证过滤器,则无需在 ValidateModelAttribute
中执行任何操作。您只需要检查 ModelState.IsValid
,这样它将在全球范围内工作,并且 return 视图与您在控制器的操作中编写的视图相同。
无需编写任何额外的代码,它就会return您的视图出错。
[ValidateModel]
public IActionResult Index(Test t)
{
return View(t);
}
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
}
base.OnActionExecuting(context);
}
}
出于 DRY 的原因,我正在练习属性验证,但我得到了一些 Web 示例 Api,我不知道是否有办法 return 具有无效数据的视图和API.
中使用的模型状态错误而不是 BadRequestObjectResult我看过官方文档,但是我不明白它在视图的情况下是如何实现的。
我正在使用具有 2 个输入的基本模型在 EF 核心实体中添加数据来测试此属性过滤器。我的 objective 得到了一些通用的东西,因为我理解它适用于 Web Api。
在此先感谢您能给我的任何帮助。
我想在 IActionResult 中更改它:
if(!ModelState.IsValid)
return View(ModelState)
类似于此属性 class:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
// I know that this line indicates a BadRequestObjectResult
// but I don't know how to returning like view if
// the Web App use razor pages
context.Result = new BadRequestObjectResult(context.ModelState);
}
base.OnActionExecuting(context);
}
这是示例的实际响应(但我想使用 MVC 页面来 return 错误和模型数据):
{ "LastName":["The LastName field is required."],"FirstName":["The FirstName"]}
如果您要创建验证过滤器,则无需在 ValidateModelAttribute
中执行任何操作。您只需要检查 ModelState.IsValid
,这样它将在全球范围内工作,并且 return 视图与您在控制器的操作中编写的视图相同。
无需编写任何额外的代码,它就会return您的视图出错。
[ValidateModel]
public IActionResult Index(Test t)
{
return View(t);
}
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
}
base.OnActionExecuting(context);
}
}