2017-04-11 4 views
1

Ich habe eine einfache Aktion mit ASP NET Core (nicht alt web api oder mvc):Wie behandelt man die Validierung leerer Modelle im MVC-Core?

[HttpPost] 
public async Task<SomeResponse> Something([FromBody] SomeRequest request) 
{ 
    // request is null here when the POST body is empty 
} 

Wenn ich poste einen leeren Körper request null ist. Ich habe einen globalen Aktionsfilter, der eine allgemeine 400-Antwort zurückgibt, wenn Modellvalidierungsfehler vorliegen.

public class ValidateModelBindingAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
     if (!context.ModelState.IsValid) 
     { 
      // 400 response here. 
     } 
    } 
} 

würde ich das Model mag ungültig sein, wenn der Körper leer ist, so dass die Filtervalidierung mit einem 400, bevor Sie reagieren wird die Aktion mit einem Null-Request-Objekt auszuführen. Ich habe versucht, ein [Required] Attribut zu dem request Parameter ohne Effekt hinzuzufügen. Gibt es eine andere Lösung da draußen?

+0

können Sie die Anfrage Klassencode? – Krishna

Antwort

1

sie der Auffassung Null Modell gültig, weil es ModelState.ErrorCount bei null prüft wird es 0 das ist, warum sie es als gültiges Modell betrachten werden, so dass Sie diese versuchen kann

public class ValidateViewModelAttribute : ActionFilterAttribute 
     { 
      public override void OnActionExecuting(ActionExecutingContext actionContext) 
      { 
       if (actionContext.ActionArguments.Any(x => x.Value == null)) 
       { 
        actionContext.Result = new BadRequestObjectResult(HttpStatusCode.BadRequest); 

       } 

       if (actionContext.ModelState.IsValid == false) 
       { 
        actionContext.Result = new BadRequestObjectResult(HttpStatusCode.BadRequest); 
       } 
      } 
     } 

und vergessen Sie nicht das ValidateViewModel Attribut hinzufügen auf action

+0

@Brandon lassen Sie mich wissen, wenn es funktioniert – Usman

+0

Das funktioniert, aber es ist nicht genau die Lösung, die ich mir erhofft hatte. Ich möchte keine Nicht-Null-Einschränkung auf alle Aktionen anwenden. Ich möchte auch, dass die Fähigkeit, einen bestimmten Parameter in einer Aktion zu sagen, nicht null sein kann, sondern ein anderer Parameter sein kann. –

Verwandte Themen