WebApiで継承された型のモデルバインディングを処理しようとしています。実際に探しているのは、デフォルトのモデルバインディングを使用してバインディングを処理することですそうすることはできませんが)、私は何か基本的なものを欠いています。WebApi継承型のモデルバインド
だから私はタイプを持っていると言う:、私はこのようなものだろうMVCコントローラを使用して
public abstract class ModuleVM
{
public abstract ModuleType ModuleType { get; }
}
public class ConcreteVM : ModuleVM
{
}
:
public class ModuleMvcBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
if (modelType == typeof(ModuleVM))
{
// Just hardcoding the type for simplicity
Type instantiationType = typeof(ConcreteVM);
var obj = Activator.CreateInstance(instantiationType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, instantiationType);
bindingContext.ModelMetadata.Model = obj;
return obj;
}
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Parameter | AttributeTargets.Struct | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class ModuleMvcBinderAttribute : CustomModelBinderAttribute
{
public override IModelBinder GetBinder()
{
return new ModuleMvcBinder();
}
}
そして、コントローラ上の属性を使用し、すべてがうまくあるが、と私は実際の作業のためにDefaultModelBinderを利用しています。私は本質的に正しいオブジェクトインスタンスを提供しています。
WebApiバージョンの場合、どうすればよいですか?
カスタムモデルバインダー(例:Error implementing a Custom Model Binder in Asp.Net Web API)を使用している場合、BindModelメソッドでは、オブジェクトをインスタンス化すると「標準」httpバインディングを使用する方法が見つからないというのが私の問題です。私はJSON(Deserialising Json to derived types in Asp.Net Web API)やXML(Getting my Custom Model bound to my POST controller)のように他の記事にも示唆されているように具体的に行うことができますが、Web APIがそれを分離する必要があるため、この点を打破しているようです。タイプ。 (すべての具体的な型は当然のことながら自然に処理されます)
私は何かを見落としていますか?オブジェクトをインスタンス化した後にBindModelの呼び出しを指示する必要がありますか?
解決策はありますか? – iuristona