Ich wollte ein globales Validierungsattribut für meine Web-API erstellen. So folgte ich die tutorial und mit dem folgende Attribute endete:ASP.NET MVC 4 RC Web-API ModelState-Fehler für optionale URL-Parameter, die Nullwerte enthalten
public class ValidationActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid)
{
return;
}
var errors = new List<KeyValuePair<string, string>>();
foreach (var key in actionContext.ModelState.Keys.Where(key =>
actionContext.ModelState[key].Errors.Any()))
{
errors.AddRange(actionContext.ModelState[key].Errors
.Select(er => new KeyValuePair<string, string>(key, er.ErrorMessage)));
}
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
}
}
Dann habe ich es zu globalen fitlers im Global.asax:
configuration.Filters.Add(new ValidationActionFilter());
Es funktioniert gut mit den meisten meinen Aktionen aber nicht wie erwartet mit Aktionen, die optionale und nullable Request-Parameter haben.
Zum Beispiel:
ich eine Route erstellt:
Und eine Aktion in meine ProductsController
:
public HttpResponseMessage GetAllProducts(int? skip, int? take)
{
var products = this._productService.GetProducts(skip, take, MaxTake);
return this.Request.CreateResponse(HttpStatusCode.OK, this._backwardMapper.Map(products));
}
Nun, wenn ich bitte diese URL: http://locahost/api/products
erhalte ich die Antwort mit 403 Statuscode und folgendem Inhalt:
[
{
"Key": "skip.Nullable`1",
"Value": "A value is required but was not present in the request."
},
{
"Key": "take.Nullable`1",
"Value": "A value is required but was not present in the request."
}
]
Ich glaube, dies sollte nicht als Validierungsfehler angezeigt werden, da diese Parameter sowohl optional als auch nullfähig sind.
Hat jemand dieses Problem gefunden und eine Lösung gefunden?
Guter Punkt, aber immer noch ist es nicht lösen das Problem Hier. Beide Parameter sind "erforderlich" und weisen im ModelState-Wörterbuch Fehler auf, obwohl sie nullfähig sind. Kennen Sie eine Möglichkeit, einen Aktionsparameter als nicht erforderlich zu kennzeichnen? –
Haben Sie diese Lösung in Ihrem Code ausprobiert? –
Wie für Ihre Frage, verwenden Sie optionale Parameter –