首页 > 解决方案 > 使用 DTO 对象作为参数将数据提交到 Web API

问题描述


我有这个 Ajax 发布功能,链接到一个带有属性“data-gig-id”的按钮。
按下按钮时调用 Web API。下面的示例完全有效,但我不明白原因。ajax 函数使用 gigId 参数(?)发出发布请求,然后调用控制器,传递的对象是 DTO,它似乎是一个带有属性的包装器。

有人可以解释一下 ajax 帖子中的 gigId 变量是如何调用适当的 DTO 并传递给控制器​​的吗?ajax 中的 gigId 是小写的,而 DTO obj 是 GigId (?)。

我很困扰...

感谢你

 <script>
    $(document).ready(function () {
        $(".js-toggle-attendance").click(function (e) {
            var button = $(e.target);
            $.post("/api/nameAPI", { gigId: button.attr("data-gig-id") })
               ... some code ...
        });
    });
</script>

这是关联的 DTO 对象

public class AttendanceDto
{
    public int GigId { get; set; }
}

然后我有一个控制器

[HttpPost]
    public IHttpActionResult Attend(AttendanceDto dto)
    {
        ... some other code ...

        return Ok();
    }

标签: jqueryajaxpostasp.net-web-apidto

解决方案


这个页面我们可以看到:

对于复杂类型,Web API 尝试使用媒体类型格式化程序从消息正文中读取值。

这个格式化程序可以在 API 配置中更改,但我认为默认情况下 JSON 使用 Newtonsoft (de)serializer。就区分大小写而言,与此格式化程序匹配的属性名称不得要求完全匹配。


推荐阅读