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

时间:2018-07-12 13:05:25

标签: jquery ajax post asp.net-web-api dto


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

有人可以解释一下ajax帖子中的gigId变量如何调用适当的DTO并传递给Controller吗? 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();
    }

2 个答案:

答案 0 :(得分:0)

this page中我们可以看到:

  

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

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

答案 1 :(得分:0)

ASP.NET Web API中的参数绑定

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

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

如果参数是“简单”类型,则Web API尝试从URI获取值。简单类型包括.NET基本类型(int,bool,double等),以及TimeSpan,DateTime,Guid,十进制和字符串,以及带有可从字符串转换的类型转换器的任何类型。 (稍后会更多有关类型转换器的信息。) 对于复杂类型,Web API会尝试使用媒体类型格式化程序从消息正文中读取值。

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

ASP.NET Web API 2中的媒体格式化程序

一种媒体类型,也称为MIME类型,标识一段数据的格式。在    HTTP,媒体类型描述了邮件正文的格式。

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