C# 如何验证ODataQueryOptions
如果OData请求的C# 如何验证ODataQueryOptions,c#,asp.net-core,.net-core,odata,C#,Asp.net Core,.net Core,Odata,如果OData请求的$top选项值超过全局限制,我将拒绝该请求ODataQueryOptions是手动创建的,我不知道如何正确触发其验证 受影响的集会 并手动创建一个ODataQueryOptions实例: 公共ODataQueryFactory(IHttpContextAccessor httpAccessor,IPErrorOuteContainer容器) { _request=httpAccessor.HttpContext.request; _odataServiceProvider=c
$top
选项值超过全局限制,我将拒绝该请求ODataQueryOptions
是手动创建的,我不知道如何正确触发其验证
受影响的集会
并手动创建一个ODataQueryOptions
实例:
公共ODataQueryFactory(IHttpContextAccessor httpAccessor,IPErrorOuteContainer容器)
{
_request=httpAccessor.HttpContext.request;
_odataServiceProvider=container.GetODataRootContainer(ODataExtensions.RouteName);
}
公共ODataQueryOptions CreateQueryOptions()
地点:班级
{
var模型=_odataServiceProvider.GetService();
var path=_request.ODataFeature().path;
var context=新的ODataQueryContext(model、typeof(tenty)、path);
var queryOptions=新的ODataQueryOptions(上下文,_请求);
返回查询选项;
}
问题是,即使调用了MaxTop(1)
,全局MaxTop
也会被忽略,从而导致成功的GET/foo?$top=10
请求
不过,如果我只是补充:
queryOptions.Validate(新的ODataValidationSettings()
{
MaxTop=1
});
对于my factory方法,则带有$top=10
的请求会产生一个外观完美的异常,导致400
响应。这是我的目标
如何使用先前传递给iroutbuilder
的所有全局设置自动触发此验证或自动创建ODataValidationSettings
实例
另外,我希望避免手动创建ODataValidationSettings,而是使用标准ODataAPI。要仅使用全局选项验证查询,请传递空的
ODataValidationSettings
参数:
queryOptions.Validate(new ODataValidationSettings());
更多信息(我直接询问了OData开发人员)
另外,如果未指定
$top
,我仍然不知道如何设置默认全局限制以防止从数据库中选择所有实体。默认验证不包括这种情况。在启动时设置routebuilder时使用MaxTop
queryOptions.Validate(new ODataValidationSettings());