ModelState序列化

时间:2013-07-16 18:04:16

标签: asp.net-web-api

我正在尝试在Web API中实现自定义验证。加洛韦关于这个主题的视频中的代码似乎已经改变了。我确实下载了代码和创建操作过滤器的方式:

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

当我使用错误数据发布到我的api时,这是返回的内容:

{"Message":"The request is invalid.","ModelState":{"user":["First name cannot start with A"]}}

注意ModelState没有显示导致错误的单个字段(如user.FirstName)。

当我运行他们的应用程序时,ModelState确实有字段信息(comment.Author):

{"Message":"The request is invalid.","ModelState":{"comment.Author":["Author is too long! This was validated on the server."]}}

我有相同的动作过滤器和非常相似的帖子后api。为什么我的错误没有显示字段级详细信息?

2 个答案:

答案 0 :(得分:0)

您可能确实将IncludeErrorDetailPolicy设置为“从不”,或者将Web.config文件中的customErrors设置为其他内容。有关详细信息,请参阅此帖子:http://www.jefclaes.be/2012/08/aspnet-web-api-error-detail-policy-now.html

答案 1 :(得分:0)

显然这是一个已知问题,最近已修复:

http://aspnetwebstack.codeplex.com/workitem/362