OData v4.0 Как установить MaxExpansionDepth?


Привет всем,

  • Мне нужна настройка в методе Get() [EnableQuery(MaxExpansionDepth=3)], чтобы ограничить глубину расширения в запросе OData.

  • Я попытался установить этот атрибут в методе Get(), но он не работает.

Не могли бы вы дать мне совет по этому поводу?

Подпишитесь как: https://github.com/OData/odata.net

Огромное спасибо


person Nhat Duy    schedule 19.09.2016    source источник
comment
Привет, пожалуйста, покажите нам фактический код, который вы пробовали, и точное сообщение об ошибке. Не работает недостаточно для нас, чтобы понять проблему.   -  person Stefan    schedule 19.09.2016
comment
Я хочу, чтобы отображалось сообщение об ошибке, когда я расширяю уровень больше, чем максимальная глубина расширения. Например. var queryOptions = new ODataQueryOptions(queryContext, Request) --› queryOptions.SelectExpand.SelectExpandClause должно отображать исключение Не разрешено — расширение уровня превышает максимальную глубину расширения Я не знаю, где установить максимальную глубину расширения. Пожалуйста, дай мне свой совет, Стефан. Спасибо   -  person Nhat Duy    schedule 19.09.2016
comment
Какую библиотеку вы используете? И какую версию вы используете? Если вы используете Web Api OData 6.0, вы можете обратиться к odata.github. io/WebApi/#13-01-modelbound-attribute и см. раздел Развернуть атрибут.   -  person Vincent    schedule 20.09.2016
comment
Я использую Web Api OData 6.0, в настоящее время я использую метод ниже для обработки проверок: enableQueryAttribute.ValidateQuery(Request, queryOptions) Всем спасибо.   -  person Nhat Duy    schedule 20.09.2016


Ответы (2)


[EnableQuery(MaxExpansionDepth = 4)]
public IQueryable<abc> Get() 
{
    return GetAQueryable<abc>();
}

перед именем вашего метода добавьте его.

person Chandrima Das    schedule 18.01.2018

В моем случае мне нужно было установить максимальную глубину расширения в объекте при создании модели edm.

При запуске вы настраиваете свой маршрут и свою модель:

routes.MapODataServiceRoute("odata", "odata", ODataDataSourceProvider.GetEdmModel(new ODataConventionModelBuilder()));

В вашем провайдере:

public IEdmModel GetEdmModel(ODataModelBuilder builder)
    {
        builder.EntitySet<Object>("Objects");

        builder
            .EntityType<Object>()
            .Filter() // Enables filtering
            .Expand(3) // Enables expanding with maximum depth: 3
            .Select(); // Enables selecting

        return builder.Build();
    }

Затем в вашем контроллере вы можете переопределить максимальное значение глубины, если оно меньше максимального значения, определенного в конфигурации объекта:

[HttpGet]
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All, MaxExpansionDepth = 2)]
public SingleResult<Object> Get(Guid key){ }
person Gabitu    schedule 07.12.2018
comment
.Expand(3) не имеет никакого эффекта! - person MJBZA; 19.07.2020