使用 DTO 对象作为参数将数据提交到 Web API

Submit data to a Web API using a DTO object as parameter


我有这个 Ajax post 函数,链接到一个属性为 "data-gig-id" 的按钮。
当按下按钮时调用 Web API。 下面的示例完全有效,但我不明白原因。 ajax 函数正在使用 gigId 参数(?)发出 post 请求,然后调用控制器并且传递的对象是 DTO,它似乎是带有 属性.[=14 的包装器=]

有人可以解释一下 ajax post 中的 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();
    }

this page我们可以看出:

For complex types, Web API tries to read the value from the message body, using a media-type formatter.

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

ASP.NETWeb 中的参数绑定API

当 Web API 调用控制器上的方法时,它必须为参数设置值,这个过程称为绑定。

默认情况下,Web API 使用以下规则绑定参数:

如果参数是 "simple" 类型,Web API 会尝试从 URI 中获取值。简单类型包括 .NET 基元类型(int、bool、double 等),加上 TimeSpan、DateTime、Guid、decimal 和 string,以及任何具有可以从字符串转换的类型转换器的类型。 (稍后会详细介绍类型转换器。) 对于复杂类型,Web API 尝试使用媒体类型格式化程序从消息正文中读取值。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

ASP.NETWeb 中的媒体格式化程序API2

媒体类型,也称为 MIME 类型,标识一段数据的格式。在 HTTP,媒体类型描述了消息体的格式。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/media-formatters