在web api中获取请求null?

时间:2016-10-06 23:23:57

标签: c# asp.net-web-api

我刚刚开始使用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,则参数不是nullBookLimit属性按预期设置为1

我只是不确定这是否是web api的工作方式。

1 个答案:

答案 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