Asp.net webapi enum-parameter mit default-Wert
Ich habe einen controller
[HttpGet]
[RoutePrefix("api/products/{productId}")]
public HttpResponseMessage Products(int productId,TypeEnum ptype=TypeEnum.Clothes)
{
if(!Enum.IsDefined(typeOf(TypeEnum),ptype))
//throw bad request exception
else
//continue processing
}
Myenum erklärt wird
public TypeEnum
{
Clothes,
Toys,
Electronics
}
Derzeit, wenn,einigen Müll Wert übergeben wird, es wird immer umgewandelt in Standardwert.
Was ich tun möchte, wenn ich rufen Sie die controller-api/Produkte/1 dann den ptype zugewiesen werden soll default-Wert ich.e Kleidung. Wenn ich rufen Sie die controller-api/Produkte/1?pType=somegarbagevalue dann sollte der controller werfen bad request Ausnahme. Wie kann ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zu tun mit
string
und verwendenTryParse()
zum konvertieren von string zuEnum
Wert.Es sieht vielleicht naiv, aber der Vorteil dieses Ansatzes ist es
ptype
parameter beliebige Zeichenfolge und durchführen Prozess ohne Ausnahme, wennptype
nicht gebunden der Wert.Definieren alle Ihre enum-Parameter als strings und dann analysieren Sie überall heißt, Sie müssen dies tun, auf jede einzelne Aktion, und Sie müssen zu kommen mit einem konsistenten Ansatz, so dass alle von parsing-Fehlern entsprechen.
Dies ist ein parameter binding-Problem und sollte nicht behandelt werden in der controller-Schicht, es sollte gesorgt werden, in der pipeline. Ein Weg dies zu tun ist, erstellen Sie einen benutzerdefinierten filter, und fügen Sie es zu Ihrer config.
- Und in deiner global.asax.cs
Wenn Sie Schwierigkeiten mit dem Modell-Zustand, es ist Typ ist ein ModelStateDictionary und Sie einfach Durchlaufen und dann ist es Fehler-Eigenschaft enthält alle model-binding-Probleme. z.B.
TypeEnum
von der Frage? Ich habe darum gebeten, eine Fragen, die auch links zu verkaufen.Diese Art der Validierung umgegangen werden soll, die in der pipeline nicht im controller.
etwas wie dieses. finden Sie MSDN-link für die ausführliche Erklärung