私のWeb APIへのPUT呼び出しを試みています。私はWebApiConfig.csで次のように設定して、ラクダのケースでWebプロジェクトにデータを送り返します。Web API 2.0は、パスカルケースでキャメルケースのJSONデータを受信します。
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver
= new CamelCasePropertyNamesContractResolver();
私のデータは、剣道UIグリッドの行から来ています。 Ajaxの呼び出しを行うJavascriptを以下の通りです:
...
save: function(e) {
var dataItem = e.model;
$.ajax({
url: apiUrl() + "/roleLocationSecurable",
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + getTwtToken(),
'LocationId': getCurrentLocation()
},
data: JSON.stringify(dataItem),
dataType: 'json'
}).done(function(data){
//stuff when finished
});
}
...
データがWeb APIに送信されるには、次のようになります。
"id":1,
"roleLocationId":5
"moduleId":5
...
私のウェブAPI 2.0コントローラのアクションは、次のようになります。
[HttpPut]
[Route("roleLocationSecurable")
public IHttpActionResult UpdateRoleLocationSecurable(RoleLocationSecurableResource model)
{
var roleLocationSecurable = Mapper.Map<RoleLocationSecurableResource, RoleLocationSecurable>(model);
if(_roleService.UpdateRoleLocationSecurable(roleLocationSecurable))
{
return Ok();
}
return NotFound();
}
そして、私のコントローラを期待しているモデルは、このような名前のプロパティがあります。
public int? Id {get;set;}
public int RoleLocationId {get;set;}
public int ModuleId {get;set;}
....
私のAjax通話は発砲しており、PUT通話の本体には上記のすべての情報とラクダのケースキーが含まれています。 Web APIコントローラーが呼び出されていますが、モデルの値には何も入力されていません(モデルは本質的に空白です)。
Web APIコントローラのActionがPascal Caseのプロパティを期待していて、Ajaxの呼び出しがCamel Caseを送信しているということです。
CameCasePropertyNamesContractResolverはデータのラケットへのシリアル化を処理しているので、なぜそれが非直列化を処理しないのですか?これを修正する簡単で簡単な方法はありますか?
上記のコードがうまくいかない理由についての助けをいただければ幸いです。
私は探していたが、似ているが、決して答えられなかったこの質問を見つけた:http://stackoverflow.com/questions/34364562/camel-cased-json-net-deserialization-from-web-api -request – Anna
あなたは実際に何が起こっているかは言及しません。渡されたパラメータはnullですか?それはあなたの方法に到達することはありませんか?実際にクライアントから送信されているもの、ブラウザのデバッグコンソールで何を見つけましたか? – Igor
良い点@Igor。この情報を含むように更新されました。 – Anna