【问题标题】:WebApi + OData: limit maximum resultsWebApi + OData:限制最大结果
【发布时间】:2016-04-21 07:54:42
【问题描述】:

我有一个带有 ODataOptions 参数的 WebAPI 控制器。

我想确保用户不能一下子下载整个数据库。
所以我验证了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

【问题讨论】:

    标签: validation asp.net-web-api odata


    【解决方案1】:

    您可以尝试使用 PageSize 来限制返回的实体数量。 有关如何使用它,请参阅此示例。 https://github.com/OData/ODataSamples/tree/master/WebApi/v4/ODataPagingSample

    【讨论】:

    • 404 在那个链接上
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2014-09-07
    • 2016-12-25
    • 2011-04-10
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多