ASP.NET MVC 3 の時代には、Phil Haack のブログJsonValueProviderFactory
に従って、JSON データをクエリ文字列パラメーターとして厳密に型指定されたパラメーターにバインドするために使用していました。
今日、これが機能していないことがわかりました。MVC Web API では、POSTED JSON データを厳密に型指定されたオブジェクト (要求の本文の JSON) にバインドするだけで、クエリ文字列の JSON データはバインドしないようです。
これは MVC 4 の場合ですか、それとも何が間違っていますか?
私のルート:
routes.MapRoute(
name: "CreateUser",
url: "{controller}/CreateUser/{userAccount}",
defaults: new { action = "CreateUser"} );
私の方法:
public JsonResult CreateUser( MyObjectType userAccount)
{ /* user is null */ }
私のクラス:
public class MyObjectType
{
public string CardNumber {get;set;}
}
その他のテスト:
// This completely fails, even if you URL Encode it:
localhost/CreateUser/{"CardNumber":"11111111"}
// Creates the object but all properties are null
localhost/CreateUser?{"CardNumber":"11111111"}
localhost/CreateUser?userAccount={"CardNumber":"11111111"}
また、値が必要ない場合でも、オブジェクトのすべてのプロパティをシリアル化しようとしました。名前のスペルや大文字と小文字が同じであることを確認しました。
パラメータを文字列として取得し、JSON.NET で問題なく逆シリアル化できますがDataAnnotations
、ModelState.IsValid
.