ModelBinder und Untermodelle

8

Ich verwende in einigen Modellen eine Untermodellklasse (UserInfo), die einige benutzerbezogene Informationen enthalten sollte. Dieses Submodell kann in verschiedenen Modellen verwendet werden, zum Beispiel

%Vor%

Ich habe einen Modellbinder erstellt und in WebApiConfig

registriert %Vor%

Die Sache ist, dass der UserModelBinder nicht von der WebApi-Verarbeitungspipeline aufgerufen wird. Es scheint, dass diese Modellbinder für die Untermodelle nicht aufgerufen werden. Fehle ich etwas?

    
user49126 04.02.2013, 15:04
quelle

2 Antworten

1

Sehen Sie sich diese Frage an Was entspricht MVCs DefaultModelBinder in der ASP.net-Web-API? für einige Details darüber, wo Ihre Bindungen stattfinden werden.

Ich vermute jedoch, dass Ihr Model im Nachrichtentext übergeben wird?

Wenn dies der Fall ist, verwendet WebApi einen Formatierer, um Ihre Typen zu deserialisieren und das Modell zu verarbeiten, wobei die Voreinstellungen XmlMediaTypeFormatter , JsonMediaTypeFormatter oder FormUrlEncodedMediaTypeFormatter sind.

Wenn Sie das Modell im Hauptteil veröffentlichen, müssen Sie abhängig von Ihrem gewünschten oder akzeptierten Inhaltstyp (application / xml, application / json usw.) möglicherweise die Einstellungen des Serialisers anpassen oder Ihre eigene MediaTypeFormatter einbinden oder implementieren. .

Wenn Sie die Anwendung / json verwenden, können Sie mit JsonConverters die Serialisierung Ihrer UserInfo-Klasse anpassen. Es gibt ein Beispiel dafür Web API ModelBinders - So binden Sie eine Eigenschaft Ihres Objekts anders und hier WebApi Json.NET benutzerdefinierte Datenverarbeitung

%Vor%     
Mark Jones 07.02.2013, 09:31
quelle
1
  

HttpConfigurationExtensions.BindParameter Methode registrieren, dass die   Der angegebene Parametertyp für eine Aktion muss mithilfe des Modells gebunden werden   Bindemittel.

Also was du getan hast, ist ähnlich wie:

%Vor%

Dies funktioniert nur, wenn der Aktionsparameter vom angegebenen Typ ist (UserInfo).

Versuchen Sie, die Binderdeklaration für die Klasse UserInfo selbst so zu setzen, dass sie global ist:

%Vor%

Es gibt jedoch einige Unterschiede in der Art und Weise, wie WebAPI- und MVC-Parameter gebunden werden. Hier ist Mike Stalls detaillierte Erklärung .

    
Nenad 04.02.2013 16:28
quelle