我有一个相当简单的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控制器在控制器范围内添加了过滤器。
我有点不确定我出错的地方,我是否使用了错误的验证属性,或者是否会在链条的早期发生故障,我不确定我应该在哪里检查发现错误。
猜测它最终会变得简单,请告诉我是否可以包含更多细节。
干杯