2013-02-05 5 views
20

Ich möchte eine benutzerdefinierte Modellbinder in ASP.Net Web API erstellen. Es gibt viele Ressourcen, um dies von Grund auf neu zu machen, aber ich möchte bestehende Funktionen nutzen.Was entspricht MVCs DefaultModelBinder in ASP.net Web API?

Ich habe in der Quelle nach Codeplex geschaut und kann viele Modelbinders drin sehen, aber die meisten sind versiegelt ... und selbst dann kann ich nicht herausfinden, welches in welchen Situationen verwendet werden würde.

Hier ist mein api Methode Header:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field) 

Was ich will ist im Grunde Intercept der Modelbinder tun, nachdem sie alle grundlegenden Eigenschaften bevölkert hat, und dann zusätzliche Werte basierend auf http-Request-Header, die ich werde auf der Clientseite eingestellt.

Wie ich sage, bin ich mit der Erstellung benutzerdefinierter Modelbinder und Modelbinderprovider vertraut und verbinde sie, das Bit, mit dem ich ein Problem habe, versucht die vorhandene Funktionalität wieder zu verwenden.

Danke, Pete

Antwort

10

Werfen Sie einen Blick hier für die Erweiterungspunkte für WebApi.

Es gibt keine genaue Entsprechung für MVC DefaultModelBinder in WebApi.

Wenn Sie das [FromBody] Attribut verwenden, wird das FormatterParameterBinding aufgerufen und ein MediaTypeFormatter wird verwendet, um Ihr Modell zu erstellen.

Die Modell Bindemittel für den URI-Pfad und URL (Query Params) wird ModelBinderParameterBinding aufrufen, welche weitergeben wird entweder ein IValueProvider oder ein IModelBinder ...

So ...

In Ihrem Beispiel Field (abhängig vom Ergebnis der Aushandlung des Inhaltstyps) wird einer davon verwendet: XmlMediaTypeFormatter, JsonMediaTypeFormatter oder FormUrlEncodedMediaTypeFormatter. Es liegt daher an Ihnen, das Serialisierungsverhalten dieser unter Verwendung ihrer jeweiligen Einstellungen anzupassen, z. JSON.NET-Einstellungen ... oder implementieren Sie eigene oder umgebrochene MediaTypeFormatter. In Ihrem Beispiel wird die appId wahrscheinlich an eine IValueProvider ... wie ElementalValueProvider weitergeleitet werden.

+0

Vielen Dank ... Sie sind genau richtig. Ich sah den Wald nicht für die Bäume. Jetzt muss ich nur noch den richtigen Weg finden, um die Fortsetzung der Aync-Aufgabe zu verwalten und ich denke, ich bin sortiert :) –