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