我試圖對我的Web API進行PUT調用。我在WebApiConfig.cs中設置了以下內容來處理在駝峯案例中將數據發送回我的Web項目。Web API 2.0接收帶有pascal case的駝峯式JSON數據
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver
= new CamelCasePropertyNamesContractResolver();
我的數據來自Kendo UI Grid中的一行。使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
...
上我的Web 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 - 請求 – Anna
你從未提及實際發生的事情。傳入的參數是否爲空?它從來沒有達到你的方法?客戶端實際發送了什麼,您在瀏覽器調試控制檯中找到了什麼? – Igor
好點@Igor。發佈更新以包含此信息。 – Anna