JSON MVC 6 中的对象映射问题
JSON object mapping issue in MVC 6
我正在 post 创建一个非常简单的 JSON 对象。 WebApi 端点已成功命中,但我传递的 JSON 数据似乎没有映射到我的 Dto 对象,我总是得到 null。这在以前的 MVC 版本中工作得很好。我尝试了一些方法,甚至添加了 [FromBody],如类似 post 中所建议的。知道为什么这不起作用吗?谢谢
Angular 服务:
app.service('Issue', [ '$resource',
function($resource) {
return $resource('api/issue', {}, {
save : { method: 'POST', url: 'api/issue/save' }
});
}]);
Angular 来电:
Issue.save({ id: 1, test: "test_string" });
Issue.save({ Id: 1, Test: "test_string" }); //this call works if I remove the camel case settings from the startup
Dto对象:
public class IssueMinDto {
public int Id { get; set; }
public string Test { get; set; }
}
WebAPI 方法:
[HttpPost("save")]
public void SaveIssue([FromBody]IssueMinDto issue) { //issue is null here
//process data
}
稍后编辑:如果我从启动中删除驼峰式大小写设置(下面的设置)并且我在调用中使用首字母大写,那么它可以工作,但这不是可以接受,因为我在应用程序中的所有数据都基于该初始设置(小写首字母)。有什么我可以改进我当前的设置来让它工作的吗?
启动设置 - 问题应在此处解决:
services.AddMvc().Configure<MvcOptions>(options => {
options.InputFormatters.Clear();
var jsonOutputFormatter = new JsonOutputFormatter();
jsonOutputFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.OutputFormatters.Insert(0, jsonOutputFormatter);
});
稍后再编辑
原来我的启动设置中的以下代码行导致了这个问题:
options.InputFormatters.Clear();
我用以下行替换了设置,现在一切正常:
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
几乎,Json参数必须等于C#参数
Issue.save({ Id: 1, Test: "test_string"});
更新 1
尝试用 $http 更改 $resource
app.service('Issue', ['$http', function ($http) {
this.save = function (data) {
return $http.post('api/issue/save', data );
}
}]);
原来我的启动设置中的以下代码行导致了这个问题:
options.InputFormatters.Clear();
我用以下行替换了设置,现在一切正常:
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
我正在 post 创建一个非常简单的 JSON 对象。 WebApi 端点已成功命中,但我传递的 JSON 数据似乎没有映射到我的 Dto 对象,我总是得到 null。这在以前的 MVC 版本中工作得很好。我尝试了一些方法,甚至添加了 [FromBody],如类似 post 中所建议的。知道为什么这不起作用吗?谢谢
Angular 服务:
app.service('Issue', [ '$resource',
function($resource) {
return $resource('api/issue', {}, {
save : { method: 'POST', url: 'api/issue/save' }
});
}]);
Angular 来电:
Issue.save({ id: 1, test: "test_string" });
Issue.save({ Id: 1, Test: "test_string" }); //this call works if I remove the camel case settings from the startup
Dto对象:
public class IssueMinDto {
public int Id { get; set; }
public string Test { get; set; }
}
WebAPI 方法:
[HttpPost("save")]
public void SaveIssue([FromBody]IssueMinDto issue) { //issue is null here
//process data
}
稍后编辑:如果我从启动中删除驼峰式大小写设置(下面的设置)并且我在调用中使用首字母大写,那么它可以工作,但这不是可以接受,因为我在应用程序中的所有数据都基于该初始设置(小写首字母)。有什么我可以改进我当前的设置来让它工作的吗?
启动设置 - 问题应在此处解决:
services.AddMvc().Configure<MvcOptions>(options => {
options.InputFormatters.Clear();
var jsonOutputFormatter = new JsonOutputFormatter();
jsonOutputFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.OutputFormatters.Insert(0, jsonOutputFormatter);
});
稍后再编辑
原来我的启动设置中的以下代码行导致了这个问题:
options.InputFormatters.Clear();
我用以下行替换了设置,现在一切正常:
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
几乎,Json参数必须等于C#参数
Issue.save({ Id: 1, Test: "test_string"});
更新 1
尝试用 $http 更改 $resource
app.service('Issue', ['$http', function ($http) {
this.save = function (data) {
return $http.post('api/issue/save', data );
}
}]);
原来我的启动设置中的以下代码行导致了这个问题:
options.InputFormatters.Clear();
我用以下行替换了设置,现在一切正常:
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();