2

我正在尝试在 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."]}}

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

4

2 回答 2

0

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

于 2013-07-16T18:09:02.710 回答
0

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

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

于 2013-08-06T21:12:04.650 回答