前の質問で抱えていた問題をどうやって解決できるか考えていました
.net Web APIモデルバインディングが処理できなかったデータにアクセスできますか?
独自のカスタムモデルバインダーを使用できるので、完璧なケースを処理でき、予期しないデータを取得したときにログに書き込むことができます。
私は次のクラスとモデルバインダーを持っています
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomPersonModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var myPerson = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var myPersonName = bindingContext.ValueProvider.GetValue("Name");
var myId = bindingContext.ValueProvider.GetValue("Id");
bindingContext.Model = new Person {Id = 2, Name = "dave"};
return true;
}
}
public class CustomPersonModelBinderProvider : ModelBinderProvider
{
private CustomPersonModelBinder _customPersonModelBinder = new CustomPersonModelBinder();
public override IModelBinder GetBinder(HttpConfiguration configuration, Type modelType)
{
if (modelType == typeof (Person))
{
return _customPersonModelBinder;
}
return null;
}
}
これが私のコントローラーメソッドです
public HttpResponseMessage Post([ModelBinder(typeof(CustomPersonModelBinderProvider))]Person person)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
そして、私はフィドラーを使用してそれを呼び出しています
Post http://localhost:18475/00.00.001/trial/343
{
"Id": 31,
"Name": "Camera Broken"
}
これはうまく機能します。カスタムモデルバインダーを使用せずに、postメソッドのjsonデータからPersonオブジェクトを取得し、カスタムモデルバインダーを使用すると、常にperson(Id = 2、Name = "dave")を取得します。
問題は、カスタムモデルバインダーでJSonデータにアクセスできないように見えることです。
bindModelメソッドのmyPerson変数とmyPersonName変数はどちらもnullです。ただし、myId変数には343が入力されます。
BindModelメソッド内でjsonのデータにアクセスする方法についてのアイデアはありますか?