使用web api进行模型验证会导致内部服务器错误

时间:2013-03-11 12:41:23

标签: c# asp.net-mvc asp.net-web-api

我有一个相当简单的web api项目,其中包含几个包含所需属性的模型。我必须能够使用XML和Json与api进行通信(没有问题,因为它是开箱即用的,只是为上下文添加细节),并将复合模型发送到动作进行处理。所有漂亮的香草。

我使用DataAnnotations Required属性修饰了我所需的属性,由于某些原因我还没弄清楚,web api只是返回500内部服务器错误,似乎没有达到验证。无论模型是否有效,都会发生这种情况。我从这里使用了重写的ValidationActionFilter:http://weblogs.asp.net/cibrax/archive/2012/02/23/validating-your-models-in-asp-net-web-api.aspx(以及其他一些地方有类似的版本)更新后适用于Web Api,而不是beta,并且它在失败之前没有达到验证属性。我在字符串,小数和日期时间属性上遇到了失败,所以我认为这不属于属性类型。

型号:

public class Client
{
    public string Title { get; set; }

    [Required]
    public string FirstName { get; set; }
    public string MiddleName { get; set; }

    [Required]
    public string LastName { get;set; }
}

验证过滤器:

public class ValidationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            var errors = actionContext.ModelState
                .Where(e => e.Value.Errors.Count > 0)
                .Select(e => new FieldValidationError
                {
                    Name = e.Key,
                    Message = e.Value.Errors.First().ErrorMessage
                }).ToArray();

            actionContext.Response =
                actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
        }

        base.OnActionExecuting(actionContext);
    }
}

使用以下行在global.asax中调用过滤器:

config.Filters.Add(new ValidationActionFilter());

我的api控制器在控制器范围内添加了过滤器。

我有点不确定我出错的地方,我是否使用了错误的验证属性,或者是否会在链条的早期发生故障,我不确定我应该在哪里检查发现错误。

猜测它最终会变得简单,请告诉我是否可以包含更多细节。

干杯

0 个答案:

没有答案