2017-05-31 46 views
0

我的自定义验证错误信息[编辑:原代码段是不正确的。]C#帮助寻找从物业饰RequiredAttribute标签

本帖被intented帮助回答具体的问题,我有,我发现了一个伟大回答。我链接到我的示例帖子,后面跟着我的帖子,给了我答案。然后,我发布了我成功使用的代码,以生成我实现的结果。]

我在验证中实现了一个简单的技术,用于输入到ApiController。下面的代码是可用的,但是你可以看到它只提供了一个通用的错误信息。

我发现来指导我这个技术答案就在这里找到:https://stackoverflow.com/a/19322688/7637275

以下是我的代码,我开始 -

using System.Web.Http; 
using System.Web.Routing; 
using System.Web.Http.Controllers; 
using System.Web; 
using System.Web.Http.Filters; 

namespace TestValidation 
{ 
    internal class ValidateModelStateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      if (!actionContext.ModelState.IsValid) 
      { 
       throw new HttpException(422, "Validation failed on input"); 
      } 
     } 
    } 
} 

下面的片断显示我需要验证错误请参阅,而不是上面提到的通用消息。

[Required(ErrorMessage = @"Parameter ""ID"" is required.")] 
[MaxLength(18, ErrorMessage = @"Exceeded max length (18 characters) for parameter ""ID""")] 
public string ID { get; set; } 

此时,我的覆盖范围内,我需要深入的HttpActionContent对象“ActionContext中”找到自定义错误消息。

回答

0

[编辑:原代码片断是不正确]

我发现了一个伟大公布答案,帮助我解决我的问题!下面的链接将您带到答案: https://stackoverflow.com/a/33009722/7637275

这是我用来从我的web服务提供自定义验证消息的结果代码。我做了三个小调整。我选择实现一个Try/Catch块,如果代码失败,它只是提供一般的错误消息。我使用了List而不是var(编码风格)。我还用分号代替换行符来加入错误(这符合我的要求)。

非常感谢两位海报在stackoverflow,帮助我得到这个底部!

using System.Web.Http; 
using System.Web.Routing; 
using System.Web.Http.Controllers; 
using System.Web; 
using System.Web.Http.Filters; 
using System.Linq; 
using System.Collections.Generic; 


namespace TestValidation 
{ 
    internal class ValidateModelStateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(HttpActionContext actionContext) 
     { 
      if (!actionContext.ModelState.IsValid) 
      { 
       string errorMessage = string.Empty; 

       List<string> errors = new List<string>(); 

       try 
       { 
        errors = actionContext.ModelState.Values.SelectMany(val => val.Errors.Select(err => err.ErrorMessage)).ToList(); 

        errorMessage = string.Join(";", errors); 
       } 
       catch     { 
        errorMessage = "Validation failed on input"; 
       } 

       throw new HttpException(422, errorMessage); 
      } 
     } 
    } 
}