就我理解,您希望能够直接在URL中传递Carrier的属性,而不是在请求体中传递。
例如:
[GET] http://localhost/entities?id=000000000000000
您的控制器方法如下
GetAllItems(Carrier carrier)
Carrier有一个Id(Guid)属性:
class Carrier {
public Guid Id { get; set; }
public string Name { get; set; }
}
在 WebApi 的模型绑定中,Carrier 是一个复杂的对象。
模型绑定的默认行为如下:
对于以下情况,Web API 使用以下规则来绑定参数:
如果参数是“简单”类型,则尝试从 URI 中获取该值。简单类型包括 .NET 原始类型(int、bool、double 等),以及 TimeSpan、DateTime、Guid、decimal 和 string,以及任何具有类型转换器的类型,可以从字符串进行转换。(稍后详细了解类型转换器。)
对于复杂类型,Web API 尝试从消息正文中读取值,使用媒体类型格式化程序。
详见:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
期待通过 URL 绑定一个复杂对象并不是 WebApi 的默认行为。
如果您想让控制器方法从 URL 模型绑定复杂对象,则需要告诉它如何操作。
GetAllItems([FromUri] Carrier carrier)
通过FromUri绑定指示符,您可以从URL中使用复杂模型绑定。
现在您甚至可以在URL中添加更多属性映射:
[GET] http://localhost/entities?id=000000000000000&name=ABC
GetAllItems将接收到一个填充了以下内容的Carrier对象:
carrier.Id = 0000-00000000000-000;
carrier.Name = "ABC"