据我了解您的问题,您希望能够直接在 URL 中而不是在您的请求正文中传递运营商的属性。
前任:
[GET] http://localhost/entities?id=000000000000000
你的控制器方法是这个
GetAllItems(Carrier carrier)
Carrier 有一个 Id (Guid) 属性:
class Carrier {
public Guid Id { get; set; }
public string Name { get; set; }
}
Carrier 在 WebApi 模型绑定方面是一个复杂的对象。
模型绑定的默认行为是:
默认情况下,Web API 使用以下规则绑定参数: 如果参数是“简单”类型,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; 运营商名称 = "ABC"