Web API 2.0使用pascal-case模型以camel-case形式接收JSON数据
Web API 2.0 recieve JSON data in camel-case with a pascal-case Model
我正在尝试对Web API进行PUT调用。我已经在WebApiConfig.cs中设置了以下内容,以处理将数据发送回camel情况下的Web项目。
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
...
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调用的主体包括上面的所有信息,以及camel-case键。正在调用Web API控制器,但模型中的值没有填充任何内容(模型基本上是空白的(。
我认为我遇到的问题(也许我错了(是Web API控制器上的Action需要Pascal Case属性,而我的Ajax调用正在发送Camel Case。
既然CameraCasePropertyNamesContractResolver正在处理将数据序列化为camel-case,为什么它不处理反序列化?有没有一种简单易行的方法来解决这个问题?
如果您能对上述代码不起作用的原因提供任何帮助,我们将不胜感激。
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver
= new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
如果您在,请将其添加到Startup.cs中。Net Core项目,它将与保持相同。Net类库。
您的ajax调用中似乎缺少contentType:"application/json"。为了让Web API正确处理内容协商和模型绑定,它必须知道传递的内容类型。如果不告诉Web API内容类型,它就无法将内容映射到模型,从而在Action中将其显示为null。以下是您更新的片段:
$.ajax({
url: getApiUrl() + "/roleLocationSecurable",
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + getJwtToken(),
'LocationId': getCurrentLocation()
},
data: dataItem,
dataType: "json",
**contentType: "application/json"**
})...
我能够测试这个,我看到了一个填充的模型。
您是否尝试过用JsonProperty注释模型属性。例如:
[JsonProperty("Id")]
public int? Id {get;set;}
[JsonProperty("RoleLocationId ")]
public int RoleLocationId {get;set;}
[JsonProperty("ModuleId ")]
public int ModuleId {get;set;}
请记住调用此程序集:using Newtonsoft.Json;
- 无法使用变量访问数据 JSON
- 使用 ng-repeat解析不均匀数据/ json对象
- 在没有jsonp的情况下从另一个域获取数据(json格式)
- 如何获取带参数的数据json
- 如何在android中显示实时雅虎金融股票数据..json格式如下所示
- 使用 JavaScript 将数据 json 显示到网页中
- 高位图表来源于API数据(JSON)
- 使用动态数据json初始化同位素
- Django:将数据JSON从视图传递给javascript
- 存储配置数据 (json)
- 未捕获的SyntaxError:意外的标识符图像数据json
- 接收数据json/jquery
- Jquery数据表数据json
- 不能在cakephp中使用数组数据json
- 在不锁定浏览器的情况下,将大数据JSON从REST请求反序列化为对象
- 如何读取数据JSON格式数组的字符串数据
- 我有一个流星应用程序,需要从/public/_assets/results/mmresults读取数据.Json文件,在
- 数据json不显示在html
- 使用2个下拉列表创建2个并排的表行来比较数据- JSON
- 需要将复杂的json对象转换为合适的angularjs UI树数据json结构