Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证ODataQueryOptions_C#_Asp.net Core_.net Core_Odata - Fatal编程技术网

C# 如何验证ODataQueryOptions

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

如果OData请求的
$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());