Ich habe mich gefragt, wie ich mit der ASP.NET-Web-API eine Modellvalidierung erreichen kann. Ich habe mein Modell so:
public class Enquiry
{
[Key]
public int EnquiryId { get; set; }
[Required]
public DateTime EnquiryDate { get; set; }
[Required]
public string CustomerAccountNumber { get; set; }
[Required]
public string ContactName { get; set; }
}
Ich habe dann eine Post-Aktion in meinem API-Controller:
public void Post(Enquiry enquiry)
{
enquiry.EnquiryDate = DateTime.Now;
context.DaybookEnquiries.Add(enquiry);
context.SaveChanges();
}
Wie füge ich if(ModelState.IsValid)
die Fehlermeldung hinzu und behandle sie dann, um sie an den Benutzer weiterzuleiten?
c#
asp.net-web-api
CallumVass
quelle
quelle
System.Net.Http
,System.Net
System.Web.Http.Controllers
undSystem.Web.Http.Filters
.IncludeErrorDetailPolicy.Always
werden die Details angezeigt (auf die Gefahr, dass Ihre Benutzer Details erfahren)Vielleicht nicht das, wonach Sie gesucht haben, aber vielleicht schön, wenn jemand weiß:
Wenn Sie .net Web Api 2 verwenden, können Sie Folgendes tun:
Abhängig von den Modellfehlern erhalten Sie folgendes Ergebnis:
quelle
So zum Beispiel:
Dies gibt eine Antwort wie diese zurück (unter der Annahme von JSON, aber dem gleichen Grundprinzip für XML):
Sie können Ihr Fehlerobjekt / Ihre Fehlerliste natürlich beliebig erstellen, z. B. Feldnamen, Feld-IDs usw. hinzufügen.
Auch wenn es sich um einen Einweg-Ajax-Aufruf wie einen POST einer neuen Entität handelt, sollten Sie dem Anrufer dennoch etwas zurückgeben - etwas, das angibt, ob die Anforderung erfolgreich war oder nicht. Stellen Sie sich eine Site vor, auf der Ihr Benutzer über eine AJAX POST-Anfrage einige Informationen über sich selbst hinzufügt. Was passiert, wenn die Informationen, die sie eingegeben haben, nicht gültig sind? Woher wissen sie, ob ihre Aktion Speichern erfolgreich war oder nicht?
Der beste Weg, dies zu tun, ist die Verwendung von guten alten HTTP-Statuscodes wie
200 OK
und so weiter. Auf diese Weise kann Ihr JavaScript Fehler mit den richtigen Rückrufen (Fehler, Erfolg usw.) ordnungsgemäß behandeln.Hier ist ein nettes Tutorial zu einer fortgeschritteneren Version dieser Methode mit ActionFilter und jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
quelle
enquiry
Objekt zurück, es sagt aber nicht, welche Eigenschaften ungültig sind? Wenn ich alsoCustomerAccountNumber
leer gelassen habe , sollte die Standardüberprüfungsnachricht angezeigt werden (CusomterAccountNumber-Feld ist erforderlich.)errors.Add(error.ErrorMessage);
umerrors.Add(error.Exception.Message);
diese Arbeit für mich zu bekommen.Sie können Attribute aus dem
System.ComponentModel.DataAnnotations
Namespace verwenden, um Validierungsregeln festzulegen. Weitere Informationen finden Sie unter Modellvalidierung - Von Mike Wasson .Siehe auch Video ASP.NET Web API, Teil 5: Benutzerdefinierte Validierung - Jon Galloway
Andere Referenzen
quelle
Oder wenn Sie nach einer einfachen Sammlung von Fehlern für Ihre Apps suchen, ist hier meine Implementierung:
Die Antwort auf die Fehlermeldung sieht folgendermaßen aus:
quelle
Fügen Sie den folgenden Code in die Datei startup.cs ein
quelle
Hier können Sie überprüfen, ob der Modellstatusfehler einzeln angezeigt wird
}}
quelle
C #
...
Javascript
quelle
Ich hatte ein Problem bei der Implementierung des akzeptierten Lösungsmusters, bei dem ich für bestimmte
ModelStateFilter
Modellobjekte immerfalse
(und anschließend 400)actionContext.ModelState.IsValid
zurückgab:Ich akzeptiere nur JSON, daher habe ich eine benutzerdefinierte Modellordnerklasse implementiert:
Was ich direkt nach meinem Modell über registriere
quelle
Sie können auch Ausnahmen auslösen, wie hier dokumentiert: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
Beachten Sie, dass Sie System.Net.Http einschließen müssen, um das zu tun, was in diesem Artikel vorgeschlagen wird
quelle