使用过滤器属性

时间:2019-11-12 06:27:40

标签: c# .net-core asp.net-core-2.1 asp.net-mvc-filters

出于DRY原因,我正在练习属性的验证,但是我得到了一些Web Api的示例,我不知道是否有一种方法可以返回带有无效数据和模型状态错误的View,而不是API中使用的BadRequestObjectResult。 / p>

我已经阅读了有关它的官方文档,但不了解在视图的情况下如何实现它。

我正在使用具有2个输入的基本模型在EF核心实体中添加数据以测试此属性过滤器。我的目标是针对这种情况获得通用的东西,因为我了解Web Api。

在此先感谢您能给我的帮助。

我要在IActionResult中对此进行更改:

if(!ModelState.IsValid)
    return View(ModelState)

类似于此属性类:

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页面返回错误和模型数据):

{ "LastName":["The LastName field is required."],"FirstName":["The FirstName"]}

1 个答案:

答案 0 :(得分:0)

如果要创建验证过滤器,则无需在ValidateModelAttribute内执行任何操作。您只需要检查ModelState.IsValid,它就可以全局运行,并且返回与您在控制器操作上编写视图相同的视图。

不编写任何额外的代码,它将返回错误的视图。

 [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);
    }

}