我刚刚开始使用web api,如果您没有任何查询参数,我想知道参数值是否应该是null
。
例如,我有这个模型:
[DataContract]
public class GetBooksRequest
{
public int? BookLimit { get; set; }
}
用于以下操作
[HttpGet]
[Route("api/books")]
public IHttpActionResult Get([FromUri]GetBooksRequest request) {
// request is null
}
如果我点击null
,参数值应该是api/books
吗?
它命中我的端点,但参数为null
。如果我执行api/books?booklimit=1
,则参数不是null
,BookLimit
属性按预期设置为1
。
我只是不确定这是否是web api的工作方式。
答案 0 :(得分:2)
是的,它是如何运作的。框架检查请求并将从URI 构建模型(因为它被告知通过[FromUri]属性检查)。
如果无法使用提供的信息构建模型,则模型/参数将设置为其默认值,在本例中为null
。这是设计的。
来源:Parameter Binding in ASP.NET Web API
使用[FromUri]
要强制Web API从URI中读取复杂类型,请添加 参数的 [FromUri] 属性。以下示例定义了GeoPoint类型,以及获取的GeoPoint类型 来自URI的GeoPoint。
public class GeoPoint { public double Latitude { get; set; } public double Longitude { get; set; } } public ValuesController : ApiController { public HttpResponseMessage Get([FromUri] GeoPoint location) { ... } }
客户端可以将纬度和经度值放在查询中 string和Web API将使用它们来构造GeoPoint。例如:
http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989