2013-02-05 9 views
20

Chcę utworzyć niestandardowy segregator modelu w ASP.Net Web API. Jest mnóstwo zasobów, jak to zrobić od zera, ale chcę wykorzystać istniejącą funkcjonalność.Jaki jest odpowiednik MVC DefaultModelBinder w ASP.net Web API?

Rozejrzałem się w źródle na codepleksie i widziałem tam mnóstwo modelarzy, ale większość jest zapieczętowana ... i nawet wtedy nie mogę się domyślić, który z nich zostanie użyty w jakich sytuacjach.

Oto moja metoda API Nagłówek:

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

Co chcę zrobić, to po prostu przechwycić modelbinder po jego zaludnionych wszystkie podstawowe właściwości, a następnie ustawić kilka dodatkowych wartości na podstawie nagłówków HTTP, że będzie ustawienie po stronie klienta.

Tak jak mówię, mam przyjemność z tworzeniem niestandardowych wzorników modeli i dostawców wzorców do modelowania i ich okablowania, ale problem, z którym się borykam, polega na ponownym wykorzystaniu istniejącej funkcjonalności.

Dzięki, Pete

Odpowiedz

10

Spójrz tutaj punkty rozszerzeń dla WebApi.

Nie ma dokładnego odpowiednika dla MVC DefaultModelBinder w WebApi.

Jeśli używasz atrybutu [FromBody], zostanie wywołany FormatterParameterBinding, a model MediaTypeFormatter zostanie użyty do skonstruowania modelu.

Modelowe spoiwa do ścieżki URI i URL (zapytanie Params) wywoła ModelBinderParameterBinding który będzie przekazać albo IValueProvider lub IModelBinder ...

Więc ...

W przykładzie Field (w zależności od wyniku negocjacji typu zawartości) użyje jednego z następujących: XmlMediaTypeFormatter, JsonMediaTypeFormatter lub FormUrlEncodedMediaTypeFormatter. W związku z tym należy dostosować zachowanie serializacji tych ustawień, używając odpowiednich ustawień, np. Ustawienia JSON.NET ... lub zaimplementuj własne lub zapakowane MediaTypeFormatter.

W twoim przykładzie appId prawdopodobnie przejdzie na IValueProvider ... jak ElementalValueProvider.

+0

Dziękuję bardzo ... masz całkowitą rację. Nie widziałem drewna dla drzew. Teraz muszę po prostu wymyślić właściwy sposób zarządzania kontynuacją zadania aync i myślę, że jestem posortowany :) –

Powiązane problemy