在 ASP.NET 中全局设置 ODataValidationSettings(例如 MaxNodeCount)

myk*_*iuk 5 c# asp.net odata asp.net-web-api

有没有办法在 ASP.NET Web API 中从ODataValidationSettings全局设置属性?

我想为我的所有控制器更改MaxNodeCount并寻找一种在全局 OData 配置期间执行此操作的方法:

public static void Register(HttpConfiguration config)
{
    var builder = new ODataConventionModelBuilder();

    config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());

    config
        .Select()
        .Expand()
        .Filter()
        .OrderBy()
        .MaxTop(null)
        .Count()
        // Looking for something like this:
        .MaxNodeCount(20)
        // Or like this:
        .SetDefaultODataValidationSettings(new ODataValidationSettings {MaxNodeCount = 20});
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*osh 1

以下是如何使用ASP.NET Core OData 8.x实现此目的。

创建一个自定义ODataQueryValidator类来实现您希望应用的验证设置

public class SalesforceODataQueryValidator : ODataQueryValidator
{
    public override void Validate(ODataQueryOptions options, ODataValidationSettings validationSettings)
    {
        validationSettings.MaxNodeCount = 300; // salesforce screens can exceed the default of 100 nodes per query
        base.Validate(options, validationSettings);
    }
}
Run Code Online (Sandbox Code Playgroud)

IODataQueryValidator设置 OData 时将此类注册为 的实现

builder.Services.AddOData(opt => {
    opt.EnableQueryFeatures()
       .AddRouteComponents("odata", edmModel, 
       odataServices => { 
          odataServices.AddSingleton<IODataQueryValidator, SalesforceODataQueryValidator>(); 
       });
});
Run Code Online (Sandbox Code Playgroud)