我有这个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();
}
答案 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会尝试使用媒体类型格式化程序从消息正文中读取值。
ASP.NET Web API 2中的媒体格式化程序
一种媒体类型,也称为MIME类型,标识一段数据的格式。在 HTTP,媒体类型描述了邮件正文的格式。
https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/media-formatters