using System;
using System.Web.Http.Controllers;
using System.Web.Http.Metadata;
using System.Web.Http.Validation;
namespace Umbraco.Web.WebApi
{
///
/// By default WebApi always appends a prefix to any ModelState error but we don't want this,
/// so this is a custom validator that ensures there is no prefix set.
///
///
/// We were already doing this with the content/media/members validation since we had to manually validate because we
/// were posting multi-part values. We were always passing in an empty prefix so it worked. However for other editors we
/// are validating with normal data annotations (for the most part) and we don't want the prefix there either.
///
internal class PrefixlessBodyModelValidator : IBodyModelValidator
{
private readonly IBodyModelValidator _innerValidator;
public PrefixlessBodyModelValidator(IBodyModelValidator innerValidator)
{
if (innerValidator == null)
{
throw new ArgumentNullException("innerValidator");
}
_innerValidator = innerValidator;
}
public bool Validate(object model, Type type, ModelMetadataProvider metadataProvider, HttpActionContext actionContext, string keyPrefix)
{
// Remove the keyPrefix but otherwise let innerValidator do what it normally does.
return _innerValidator.Validate(model, type, metadataProvider, actionContext, string.Empty);
}
}
}