类型' ValidationModelActionFilterAttribute'必须来自Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata'。' IN asp.net核心WEB API

时间:2017-04-25 22:01:58

标签: c# asp.net-core

我正在为模型状态验证创建自定义过滤器。 但是我得到了上面的错误,我无法弄明白。

Startup.cs

 services.AddMvc(opts => 
            {
                opts.Filters.Add(typeof(ValidationModelActionFilterAttribute));
            });

ValidationModelActionFilterAttribute.cs

public class ValidationModelActionFilterAttribute :ActionFilterAttribute
    {
        public ValidationModelActionFilterAttribute()
        {

        }
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                context.Result = new BadRequestObjectResult(new ValidationResultModel(context.ModelState));
            }
        }
    }

ValidationResultModel.cs

  public class ValidationResultModel
    {
        public string Message { get;  }
        public List<ValidationError> Errors { get; }

        public ValidationResultModel(ModelStateDictionary modelState)
        {
            Message = "Validation Failed";
            Errors = modelState.Keys.SelectMany(key => modelState[key].Errors.Select(x => new ValidationError(key, x.ErrorMessage))).ToList();
        }
    }

2 个答案:

答案 0 :(得分:0)

有两个版本的 ActionFilterAttribute

Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute

System.Web.Http.Filters.ActionFilterAttribute

确保根据您的项目类型和控制器类型使用正确的

如果项目是 aso.net core 使用第一个

答案 1 :(得分:-1)

问题是名称空间。 IT应该

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

不会

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;