2016-10-06 47 views
1

我刚开始使用web API,我想知道如果参数值应该是null如果你没有任何查询参数。在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的工作方式。

回答

2

是的,它是如何工作的。该框架检查请求并将从URI 建立模型(因为它被告知通过[FromUri]属性检查)

如果无法使用提供的信息构建模型,则模型/参数将设置为其默认值,在此例中为null。这是设计。

来源:Parameter Binding in ASP.NET Web API

使用[FromUri]

要强制网络API来读取从URI的复杂类型,所述 [FromUri]属性添加到参数。以下示例定义了一个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) { ... } 
} 

客户可以把经纬度值在查询字符串 和Web API将使用它们来构造一个GeoPoint。例如:

http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989