在 ASP.NET Core 2.2 中通过数据类型为 JSON 的 ajax post 调用操作时数据未成功绑定

data not binded successfully in ASP.NET Core 2.2 when calling an action by an ajax post with data type JSON

我检查了许多其他人发布的类似问题并尝试了不同的解决方案但没有成功。

我有一个 asp.net 核心 2.2 网络应用程序(控制器,而不是 rest-api)并且我添加了启动配置 json 格式化程序:

AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

进入我的视图我是这样做的:

function crearObjetoTramiteRequisito() {
        var tramiteGeneralId = retornarItemGridTramitesGenerales().Id;
        var tramitesRequisitos = [];
        $.each(arrayDocumentoSeleccionado, function (index, value) {
            tramitesRequisitos.push({ Id: 0, TramiteDocumentoId: value, TramiteGeneralId: tramiteGeneralId});
        });
        
        return tramitesRequisitos;
    }

function guardarTramitesRequisitos() {
        onCloseWindowRequisitos();
        var requestData = crearObjetoTramiteRequisito();
       
        $.ajax({
            url: "@Url.Action("CrearRequisitos", "ConfiguracionTramitesGenerales")",
            type: 'POST',
            headers: {
                "RequestVerificationToken": antiForgeryTokens()
            },
            dataType: 'json',
            data: {'requestData': JSON.stringify(requestData) },
            success: function (result) {
                console.log(result);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }

我希望控制器参数中有一个 JSON 数组。

视图模型:

public class TramiteRequisitoViewModel
{
    public int Id { get; set; }
    public int TramiteDocumentoId { get; set; }
    public int TramiteGeneralId { get; set; }
}

控制器是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult CrearRequisitos (List<TramiteRequisitoViewModel> requestData)
    {
        int x = 0;

requestData 参数带有 0 个元素。

无论我使用 [FromBody] param 属性还是使用数组 JSON 对象而不是将它们字符串化,都不起作用,既不使用 contentType: "application/json; charset=utf-8 “

将此
data: {'requestData': JSON.stringify(requestData) }
更改为
data: { JSON.stringify(requestData) }

ContentType是请求的dataType,dataType是响应的dataType,可以参考他的link.

并且数据应该是这种格式data: JSON.stringify(requestData)

一个简单的测试如下:

脚本:

<button id="btn" onclick="guardarTramitesRequisitos()" value="Submit"></button>

@section scripts{ 
    <script>
    function crearObjetoTramiteRequisito() {
        var tramitesRequisitos = [];
        tramitesRequisitos.push({ Id: 0, TramiteDocumentoId: 1, TramiteGeneralId: 1 });
        tramitesRequisitos.push({ Id: 0, TramiteDocumentoId: 2, TramiteGeneralId: 1 });
        console.log(tramitesRequisitos);
        return tramitesRequisitos;
    }

    function guardarTramitesRequisitos() {
    
        var requestData = crearObjetoTramiteRequisito();

        $.ajax({
            url: "@Url.Action("CrearRequisitos", "ConfiguracionTramitesGenerales")",
            type: 'POST',
            contentType:'application/json; charset=utf-8',
            dataType: 'json',
            data: JSON.stringify(requestData),
            success: function (result) {
                console.log(result);
            },
            error: function (e) {
                console.log(e);
            }
        });
    }
    </script>
}

控制器:

[HttpPost]
public JsonResult CrearRequisitos([FromBody]List<TramiteRequisitoViewModel> requestData)
{
    return Json(requestData);
}

结果: