2016-04-20 42 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

回答