2017-04-25 38 views
0

我正在为modelstate验证创建自定义过滤器。 但我得到上述错误,我不明白。类型'ValidationModelActionFilterAttribute'必须来自'Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata'。' IN asp.net核心WEB API

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(); 
     } 
    } 
+0

'IFilterMetadata'看起来像一个空的接口,可你只是把它添加到您的属性? – DavidG

+0

已尝试不起作用 – maxspan

+0

“不起作用”以何种方式? – DavidG

回答

-1

的问题是命名空间。 应该是

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

using Microsoft.AspNetCore.Mvc; 
    using Microsoft.AspNetCore.Mvc.Filters; 
相关问题