无法让 POST 在 jQuery AJAX/Web API 中工作 - 参数始终为空

Can't get POST to work in jQuery AJAX/Web API - parameter always null

我似乎无法对复杂类型进行绑定。我已经尝试了这里关于 SO 的大部分建议,但似乎无法使其发挥作用。参数始终为空。

function createFile(filename, x, y, width, height) {
    var image = {
        Filename: filename,
        X: x,
        Y: y,
        Width: width,
        Height: height
    };

    $.ajax({
        type: "POST",
        url: Server.Domain() + "media/createFile",
        data: JSON.stringify(image),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert('success');
        },
        error: function (xhr, err) {
            //
        }
    });
}

和 Web API 方法:

    [Route("api/media/createFile")]
    [HttpPost]
    public bool CreateFile(ItemDto item)
    {
        bool success = false;
        try
        {
            //
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return success;
    }

和类型:

public class ItemDto
{
    public string Filename { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }
}

Web API 被调用,但 'item' 参数始终为空。我尝试添加 FromBody,删除内容类型(有些人说它不应该存在,但我认为不应该是这种情况,因为我正在通过 JSON),但仍然无济于事。

编辑:

这是发送的内容 "{"Filename":"30.jpg","X":29.999999999999993,"Y":29.999999999999993,"Width":240.00000000000003,"Height":240.00000000000003}" =19=]

更新:

将 JavaScript 对象更改为此绑定成功:

var image = {
        Filename: "a",
        X: "1",
        Y: "2",
        Width: "3",
        Height: "4"
    };

发送的值为

"{"Filename":"a","X":"1","Y":"2","Width":"3","Height":"4"}"

我的原始值有问题吗?

更新 2:

我将 X 更改为 1.1111111111 并使用和不使用双引号进行了测试。参数不为 null 但 X 在 Web 中等于零 API.

事实证明,数据类型错误:

public class ItemDto
{
    public string Filename { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }
}

我发送的是带小数点的数字。将数据类型更改为十进制修复了问题。