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?
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
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 .
Tags und Links asp.net-web-api asp.net-mvc-4 model-binding