2016-04-15 3 views
3

На основании этой ссылки 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 переменная. enter image description here

+0

работает нормально для меня. –

+1

@AmitKumarGhosh Нет, это не так! – codebased

ответ

1

Мой тест-

[CheckModelForNullAttribute(ExcludeArgs = new string[] { "Test" }, ErrorMessage = "error", ErrorCode = "404")] 

enter image description here

+1

Умм интересно, какая версия WebApi вы используете, я на webapi 5.2.3 Я также заметил, что мой инициирует фильтр дважды, т. Е. Когда я поставил точку останова на конструкторе. из-за ваших больших усилий я подниму ваш ответ. Если вы можете проверить версию, о которой я упоминал, возможно, ответ, если в последней версии будет ошибка. – codebased

+0

Привет, ребята. Я столкнулся с теми же проблемами как с массивами строк, так и с объектами, переходящими в ActionFilterAttribute для WebApi 5.2.3. Странно, что int и double массивы работают нормально. У вас есть некоторые результаты расследования этого вопроса? –

 Смежные вопросы

  • Нет связанных вопросов^_^