【发布时间】: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