2016-04-15 18 views
3

Basierend auf diesem Link https://msdn.microsoft.com/en-us/library/aa664615(v=vs.71).aspx kann ich Single-Dimension-Array von primitiven Typen übergeben. Immer wenn ich jedoch ein String-Array übergebe, bekomme ich keine gewünschten Werte für diese Custom-Action-Filter-Eigenschaft. Gibt es irgendetwas, was ich falsch mache?Kann String Array nicht an den WebApi Actionfilter übergeben

[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)); 
     } 
    } 
} 

Und es wird verwendet als:

[CheckModelForNullAttribute(ExcludeArgs = new[] { "requests"}, ErrorMessage = Constants.GenericErrors.DefaultError)] 
public HttpResponseMessage Create([FromBody] CreateAccountsRequest requests) 
{ } 

auf Debug, wenn der Cursor kommen _validate (...) Zustand der Wert des String-Array ist leer, wo, wie ich habe einen erforderlichen Wert in ErrorMessage Variable. enter image description here

+0

für mich gut funktioniert. –

+1

@AmitKumarGhosh Kein Kumpel ist es nicht! – codebased

Antwort

1

Mein test-

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

enter image description here

+1

Umm interessant, was ist die Version von WebApi verwenden Sie, ich bin auf Webapi 5.2.3 Ich habe auch bemerkt, dass meins Filter zweimal initiiert, d. H. Wenn ich Breakpoint auf einen Konstruktor setzen. wegen Ihrer großen Anstrengungen werde ich Ihre Antwort erheben. Wenn Sie mit der Version, die ich erwähnt habe, überprüfen können, wird wahrscheinlich eine Antwort sein, wenn es einen Fehler in der neuesten Version gibt. – codebased

+0

Hallo Leute. Ich habe die gleichen Probleme mit String- und Objekt-Arrays, die an ActionFilterAttribute für WebApi 5.2.3 übergeben werden. Seltsam, dass int und double arrays gut funktionieren. Haben Sie einige Ergebnisse dieser Untersuchung? –