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();