2016-04-20 40 views
0

我有一个WebAPI控制器,它需要一个ODataOptions参数。WebApi + OData:限制最大结果

我想确保用户不能一下子下载整个数据库。
所以,我确认了options对象:

public IHttpActionResult Get(ODataQueryOptions<ViewModel> options) 
{ 

    var oDataValidationSettings = new ODataValidationSettings 
    { 
     MaxTop = 100 
    } 
    try 
    { 
     options.Validate(oDataValidationSettings); 
    } 
    catch (ODataException ex) 
    { 
     return BadRequest("OData query validation failed: " + ex.Message); 
    } 
    //return results 
} 

该呼叫的伟大工程一样

http://host/api/controller?$filter=...&$top=1000 

这将返回预期的验证错误消息。

但它是十分容易,只需提出请求,以规避:

http://host/api/controller? 

没有$top,什么都没有。 这实际上返回整个表!
如果完全没有指定$top参数,则不会触发验证程序。

从oData选项构造查询时,我可以附加.Take(100),但它似乎很难。

有没有更好的方法来处理丢失的$top

回答