WebApi 2.1模型验证在本地工作,但在服务器上运行时不显示缺少的字段

时间:2014-04-28 21:00:33

标签: asp.net-web-api

我们正在使用WebApi v2.1并通过WebApiConfig类中应用的过滤器验证ModelState。

当我们在服务器(Win Server 2008R2)上运行时,错误消息中未列出根据需要指定的字段,但是当我们在本地运行时(在IISExpress上)它们可以正常工作。

请求在本地和服务器上被正确拒绝,但服务器响应未显示缺少的字段。

例如: 如果本地请求缺少必需的abbreviation和issuerName字段,则响应将按预期显示:

  

{     " message":"请求无效。",     " modelState":{       "价值":[         "必需的属性'缩写'在JSON中找不到。路径'',第18行,第2位。",         "必需的财产' issuerName'在JSON中找不到。路径'',第18行,第2位。"       ]     }

当相同的请求发送到服务器时,响应显示:

  

{     " message":"请求无效。",     " modelState":{       "价值":[         "发生了错误。",         "发生了错误。"       ]     }   }

我们的过滤器如下:

  

public class ValidateModelStateAttribute:ActionFilterAttribute
  {
      public override void OnActionExecuting(HttpActionContext actionContext)
      {
          if(!actionContext.ModelState.IsValid)
          {
              actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,actionContext.ModelState);
          }       }   }

我们的数据模型类使用DataContract属性进行修饰,所需字段的归属如下:

    [DataMember(IsRequired=true)]        
    public string IssuerName

1 个答案:

答案 0 :(得分:3)

服务器对于向客户端发送错误更具限制性。尝试在http配置上设置IncludeErrorDetails标志以验证这是否是潜在问题。

一般情况下,虽然打开此标志并不是最好的主意,但您希望以不同方式序列化错误。

欲了解更多信息: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx