На основании этой ссылки https://msdn.microsoft.com/en-us/library/aa664615(v=vs.71).aspx Я могу передать массив одномерных массивов примитивных типов. Однако всякий раз, когда я передаю строковый массив, я не получаю желаемые значения, установленные против этого свойства фильтра пользовательских действий. Есть ли что-то, что я делаю неправильно?Невозможно передать строковый массив в WebApi Actionfilter
[AttributeUsage(AttributeTargets.Method, Inherited = true)]
public class CheckModelForNullAttribute : ActionFilterAttribute
{
private readonly Func<Dictionary<string, object>, string[], bool> _validate;
public string ErrorMessage { get; set; }
public string ErrorCode { get; set; }
public string[] ExcludeArgs { get; set; }
public CheckModelForNullAttribute()
: this((objects, excludedArgs) => objects.ContainsValue(null) && excludedArgs.Any(objects.ContainsKey) == false)
{
}
public CheckModelForNullAttribute(Func<Dictionary<string, object>, string[], bool> checkCondition)
{
_validate = checkCondition;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (_validate(actionContext.ActionArguments, ExcludeArgs))
{
actionContext.ModelState.AddModelError("EmptyModel", ErrorMessage);
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, actionContext.ModelState.ValidationErrors(ErrorCode));
}
}
}
И он используется как:
[CheckModelForNullAttribute(ExcludeArgs = new[] { "requests"}, ErrorMessage = Constants.GenericErrors.DefaultError)]
public HttpResponseMessage Create([FromBody] CreateAccountsRequest requests)
{ }
На отладки, когда курсор прийти _validate (...) состояние величина массива строк пустой, где, как у меня есть нужное значение в ErrorMessage
переменная.
работает нормально для меня. –
@AmitKumarGhosh Нет, это не так! – codebased