diff --git a/src/Microsoft.AspNetCore.OData/Edm/EdmHelpers.cs b/src/Microsoft.AspNetCore.OData/Edm/EdmHelpers.cs index f8dfa4f33..050fb2bc7 100644 --- a/src/Microsoft.AspNetCore.OData/Edm/EdmHelpers.cs +++ b/src/Microsoft.AspNetCore.OData/Edm/EdmHelpers.cs @@ -137,10 +137,10 @@ public static IEnumerable GetAllDerivedEntityTypes(IEdmEntityTyp } public static bool IsTopLimitExceeded(IEdmProperty property, IEdmStructuredType structuredType, - IEdmModel edmModel, int top, DefaultQuerySettings defaultQuerySettings, out int maxTop) + IEdmModel edmModel, int top, DefaultQueryConfigurations defaultQueryConfigs, out int maxTop) { maxTop = 0; - ModelBoundQuerySettings querySettings = edmModel.GetModelBoundQuerySettings(property, structuredType, defaultQuerySettings); + ModelBoundQuerySettings querySettings = edmModel.GetModelBoundQuerySettings(property, structuredType, defaultQueryConfigs); if (querySettings != null && top > querySettings.MaxTop) { maxTop = querySettings.MaxTop.Value; @@ -339,14 +339,14 @@ public static ModelBoundQuerySettings GetModelBoundQuerySettingsOrNull(this IEdm } public static ModelBoundQuerySettings GetModelBoundQuerySettings(this IEdmModel edmModel, IEdmProperty property, - IEdmStructuredType structuredType, DefaultQuerySettings defaultQuerySettings = null) + IEdmStructuredType structuredType, DefaultQueryConfigurations defaultQueryConfigs = null) { if (edmModel == null) { throw Error.ArgumentNull(nameof(edmModel)); } - ModelBoundQuerySettings querySettings = edmModel.GetModelBoundQuerySettings(structuredType, defaultQuerySettings); + ModelBoundQuerySettings querySettings = edmModel.GetModelBoundQuerySettings(structuredType, defaultQueryConfigs); if (property == null) { return querySettings; @@ -354,12 +354,12 @@ public static ModelBoundQuerySettings GetModelBoundQuerySettings(this IEdmModel else { // Settings on property is higher priority than the ones on type. - ModelBoundQuerySettings propertyQuerySettings = edmModel.GetModelBoundQuerySettings(property, defaultQuerySettings); + ModelBoundQuerySettings propertyQuerySettings = edmModel.GetModelBoundQuerySettings(property, defaultQueryConfigs); return GetMergedPropertyQuerySettings(propertyQuerySettings, querySettings); } } - private static ModelBoundQuerySettings GetModelBoundQuerySettings(this IEdmModel edmModel, T key, DefaultQuerySettings defaultQuerySettings = null) + private static ModelBoundQuerySettings GetModelBoundQuerySettings(this IEdmModel edmModel, T key, DefaultQueryConfigurations defaultQueryConfigs = null) where T : IEdmElement { if (key == null) @@ -372,10 +372,10 @@ private static ModelBoundQuerySettings GetModelBoundQuerySettings(this IEdmMo if (querySettings == null) { querySettings = new ModelBoundQuerySettings(); - if (defaultQuerySettings != null && - (!defaultQuerySettings.MaxTop.HasValue || defaultQuerySettings.MaxTop > 0)) + if (defaultQueryConfigs != null && + (!defaultQueryConfigs.MaxTop.HasValue || defaultQueryConfigs.MaxTop > 0)) { - querySettings.MaxTop = defaultQuerySettings.MaxTop; + querySettings.MaxTop = defaultQueryConfigs.MaxTop; } } diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml index 8b856e5c4..7abcaac38 100644 --- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml +++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml @@ -6275,9 +6275,9 @@ Gets or sets whether or not the OData system query options should be prefixed with '$'. - + - Gets the query setting. + Gets the query configurations. @@ -8012,6 +8012,49 @@ + + + This class describes the default configurations to use during query composition. + + + + + Gets or sets a value indicating whether navigation property can be expanded. + + + + + Gets or sets a value indicating whether property can be selected. + + + + + Gets or sets a value indicating whether entity set and property can apply $count. + + + + + Gets or sets a value indicating whether property can apply $orderby. + + + + + Gets or sets a value indicating whether property can apply $filter. + + + + + Gets or sets the max value of $top that a client can request. + + + The max value of $top that a client can request, or null if there is no limit. + + + + + Gets or sets a value indicating whether the service will use skiptoken or not. + + This partial class defines the configuration on . @@ -9776,9 +9819,9 @@ The EDM type of the element of the collection being queried. The parsed . - + - Gets the given . + Gets the given . diff --git a/src/Microsoft.AspNetCore.OData/ODataOptions.cs b/src/Microsoft.AspNetCore.OData/ODataOptions.cs index 453972a95..09edefefa 100644 --- a/src/Microsoft.AspNetCore.OData/ODataOptions.cs +++ b/src/Microsoft.AspNetCore.OData/ODataOptions.cs @@ -11,6 +11,7 @@ using System.Diagnostics.Contracts; using Microsoft.AspNetCore.OData.Abstracts; using Microsoft.AspNetCore.OData.Batch; +using Microsoft.AspNetCore.OData.Query; using Microsoft.AspNetCore.OData.Routing; using Microsoft.AspNetCore.OData.Routing.Conventions; using Microsoft.Extensions.DependencyInjection; @@ -195,12 +196,12 @@ public IServiceProvider GetRouteServices(string routePrefix) /// The current instance to enable fluent configuration. public ODataOptions EnableQueryFeatures(int? maxTopValue = null) { - QuerySettings.EnableExpand = true; - QuerySettings.EnableSelect = true; - QuerySettings.EnableFilter = true; - QuerySettings.EnableOrderBy = true; - QuerySettings.EnableCount = true; - QuerySettings.EnableSkipToken = true; + QueryConfigurations.EnableExpand = true; + QueryConfigurations.EnableSelect = true; + QueryConfigurations.EnableFilter = true; + QueryConfigurations.EnableOrderBy = true; + QueryConfigurations.EnableCount = true; + QueryConfigurations.EnableSkipToken = true; SetMaxTop(maxTopValue); return this; } @@ -211,7 +212,7 @@ public ODataOptions EnableQueryFeatures(int? maxTopValue = null) /// The current instance to enable fluent configuration. public ODataOptions Expand() { - QuerySettings.EnableExpand = true; + QueryConfigurations.EnableExpand = true; return this; } @@ -221,7 +222,7 @@ public ODataOptions Expand() /// The current instance to enable fluent configuration. public ODataOptions Select() { - QuerySettings.EnableSelect = true; + QueryConfigurations.EnableSelect = true; return this; } @@ -231,7 +232,7 @@ public ODataOptions Select() /// The current instance to enable fluent configuration. public ODataOptions Filter() { - QuerySettings.EnableFilter = true; + QueryConfigurations.EnableFilter = true; return this; } @@ -241,7 +242,7 @@ public ODataOptions Filter() /// The current instance to enable fluent configuration. public ODataOptions OrderBy() { - QuerySettings.EnableOrderBy = true; + QueryConfigurations.EnableOrderBy = true; return this; } @@ -251,7 +252,7 @@ public ODataOptions OrderBy() /// The current instance to enable fluent configuration. public ODataOptions Count() { - QuerySettings.EnableCount = true; + QueryConfigurations.EnableCount = true; return this; } @@ -261,7 +262,7 @@ public ODataOptions Count() /// The current instance to enable fluent configuration. public ODataOptions SkipToken() { - QuerySettings.EnableSkipToken = true; + QueryConfigurations.EnableSkipToken = true; return this; } @@ -277,7 +278,7 @@ public ODataOptions SetMaxTop(int? maxTopValue) throw Error.ArgumentMustBeGreaterThanOrEqualTo(nameof(maxTopValue), maxTopValue, 0); } - QuerySettings.MaxTop = maxTopValue; + QueryConfigurations.MaxTop = maxTopValue; return this; } @@ -287,9 +288,9 @@ public ODataOptions SetMaxTop(int? maxTopValue) public bool EnableNoDollarQueryOptions { get; set; } = true; /// - /// Gets the query setting. + /// Gets the query configurations. /// - public DefaultQuerySettings QuerySettings { get; } = new DefaultQuerySettings(); + public DefaultQueryConfigurations QueryConfigurations { get; } = new DefaultQueryConfigurations(); #endregion @@ -310,8 +311,8 @@ private IServiceProvider BuildRouteContainer(IEdmModel model, ODataVersion versi // Inject the core odata services. builder.AddDefaultODataServices(version); - // Inject the default query setting from this options. - builder.Services.AddSingleton(sp => QuerySettings); + // Inject the default query configuration from this options. + builder.Services.AddSingleton(sp => this.QueryConfigurations); // Inject the default Web API OData services. builder.AddDefaultWebApiServices(); diff --git a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt index 5de14d2c3..b422f23b4 100644 --- a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt +++ b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt @@ -668,7 +668,7 @@ Microsoft.AspNetCore.OData.ODataOptions.Filter() -> Microsoft.AspNetCore.OData.O Microsoft.AspNetCore.OData.ODataOptions.GetRouteServices(string routePrefix) -> System.IServiceProvider Microsoft.AspNetCore.OData.ODataOptions.ODataOptions() -> void Microsoft.AspNetCore.OData.ODataOptions.OrderBy() -> Microsoft.AspNetCore.OData.ODataOptions -Microsoft.AspNetCore.OData.ODataOptions.QuerySettings.get -> Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings +Microsoft.AspNetCore.OData.ODataOptions.QueryConfigurations.get -> Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations Microsoft.AspNetCore.OData.ODataOptions.RouteComponents.get -> System.Collections.Generic.IDictionary Microsoft.AspNetCore.OData.ODataOptions.RouteOptions.get -> Microsoft.AspNetCore.OData.Routing.ODataRouteOptions Microsoft.AspNetCore.OData.ODataOptions.Select() -> Microsoft.AspNetCore.OData.ODataOptions @@ -812,6 +812,22 @@ Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser.CanParse(Microsoft.AspNetCore.Http.HttpRequest request) -> bool Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser.DefaultODataQueryRequestParser() -> void Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser.ParseAsync(Microsoft.AspNetCore.Http.HttpRequest request) -> System.Threading.Tasks.Task +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.DefaultQueryConfigurations() -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableCount.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableCount.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableExpand.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableExpand.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableFilter.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableFilter.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableOrderBy.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableOrderBy.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableSelect.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableSelect.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableSkipToken.get -> bool +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.EnableSkipToken.set -> void +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.MaxTop.get -> int? +Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations.MaxTop.set -> void Microsoft.AspNetCore.OData.Query.DefaultSkipTokenHandler Microsoft.AspNetCore.OData.Query.DefaultSkipTokenHandler.DefaultSkipTokenHandler() -> void Microsoft.AspNetCore.OData.Query.EnableQueryAttribute @@ -935,7 +951,7 @@ Microsoft.AspNetCore.OData.Query.IODataQueryRequestParser Microsoft.AspNetCore.OData.Query.IODataQueryRequestParser.CanParse(Microsoft.AspNetCore.Http.HttpRequest request) -> bool Microsoft.AspNetCore.OData.Query.IODataQueryRequestParser.ParseAsync(Microsoft.AspNetCore.Http.HttpRequest request) -> System.Threading.Tasks.Task Microsoft.AspNetCore.OData.Query.ODataQueryContext -Microsoft.AspNetCore.OData.Query.ODataQueryContext.DefaultQuerySettings.get -> Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings +Microsoft.AspNetCore.OData.Query.ODataQueryContext.DefaultQueryConfigurations.get -> Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations Microsoft.AspNetCore.OData.Query.ODataQueryContext.ElementClrType.get -> System.Type Microsoft.AspNetCore.OData.Query.ODataQueryContext.ElementType.get -> Microsoft.OData.Edm.IEdmType Microsoft.AspNetCore.OData.Query.ODataQueryContext.Model.get -> Microsoft.OData.Edm.IEdmModel diff --git a/src/Microsoft.AspNetCore.OData/Query/DefaultQueryConfigurations.cs b/src/Microsoft.AspNetCore.OData/Query/DefaultQueryConfigurations.cs new file mode 100644 index 000000000..81f1cac5f --- /dev/null +++ b/src/Microsoft.AspNetCore.OData/Query/DefaultQueryConfigurations.cs @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------------- +// +// Copyright (c) .NET Foundation and Contributors. All rights reserved. +// See License.txt in the project root for license information. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.AspNetCore.OData.Query +{ + /// + /// This class describes the default configurations to use during query composition. + /// + public class DefaultQueryConfigurations + { + private int? _maxTop = 0; + + /// + /// Gets or sets a value indicating whether navigation property can be expanded. + /// + public bool EnableExpand { get; set; } + + /// + /// Gets or sets a value indicating whether property can be selected. + /// + public bool EnableSelect { get; set; } + + /// + /// Gets or sets a value indicating whether entity set and property can apply $count. + /// + public bool EnableCount { get; set; } + + /// + /// Gets or sets a value indicating whether property can apply $orderby. + /// + public bool EnableOrderBy { get; set; } + + /// + /// Gets or sets a value indicating whether property can apply $filter. + /// + public bool EnableFilter { get; set; } + + /// + /// Gets or sets the max value of $top that a client can request. + /// + /// + /// The max value of $top that a client can request, or null if there is no limit. + /// + public int? MaxTop + { + get => _maxTop; + set + { + if (value.HasValue && value < 0) + { + throw Error.ArgumentMustBeGreaterThanOrEqualTo("value", value, 0); + } + + _maxTop = value; + } + } + + /// + /// Gets or sets a value indicating whether the service will use skiptoken or not. + /// + public bool EnableSkipToken { get; set; } + } +} diff --git a/src/Microsoft.AspNetCore.OData/Query/ODataQueryContext.cs b/src/Microsoft.AspNetCore.OData/Query/ODataQueryContext.cs index cf874fd94..7975da250 100644 --- a/src/Microsoft.AspNetCore.OData/Query/ODataQueryContext.cs +++ b/src/Microsoft.AspNetCore.OData/Query/ODataQueryContext.cs @@ -16,7 +16,6 @@ using Microsoft.Extensions.Options; using Microsoft.OData; using Microsoft.OData.Edm; -using Microsoft.OData.ModelBuilder.Config; using Microsoft.OData.UriParser; namespace Microsoft.AspNetCore.OData.Query @@ -26,7 +25,7 @@ namespace Microsoft.AspNetCore.OData.Query /// public class ODataQueryContext { - private DefaultQuerySettings _defaultQuerySettings; + private DefaultQueryConfigurations _defaultQueryConfigurations; /// /// Constructs an instance of with , element CLR type, @@ -106,20 +105,20 @@ internal ODataQueryContext() { } /// - /// Gets the given . + /// Gets the given . /// - public DefaultQuerySettings DefaultQuerySettings + public DefaultQueryConfigurations DefaultQueryConfigurations { get { - if (_defaultQuerySettings == null) + if (_defaultQueryConfigurations == null) { - _defaultQuerySettings = RequestContainer == null + _defaultQueryConfigurations = RequestContainer == null ? GetDefaultQuerySettings() - : RequestContainer.GetRequiredService(); + : RequestContainer.GetRequiredService(); } - return _defaultQuerySettings; + return _defaultQueryConfigurations; } } @@ -200,20 +199,20 @@ private void GetPathContext() } } - private DefaultQuerySettings GetDefaultQuerySettings() + private DefaultQueryConfigurations GetDefaultQuerySettings() { if (Request is null) { - return new DefaultQuerySettings(); + return new DefaultQueryConfigurations(); } IOptions odataOptions = Request.HttpContext?.RequestServices?.GetService>(); if (odataOptions is null || odataOptions.Value is null) { - return new DefaultQuerySettings(); + return new DefaultQueryConfigurations(); } - return odataOptions.Value.QuerySettings; + return odataOptions.Value.QueryConfigurations; } } } diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/DefaultSkipTokenHandler.cs b/src/Microsoft.AspNetCore.OData/Query/Query/DefaultSkipTokenHandler.cs index bda404526..85be52066 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/DefaultSkipTokenHandler.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/DefaultSkipTokenHandler.cs @@ -64,8 +64,8 @@ public override Uri GenerateNextPageLink(Uri baseUri, int pageSize, Object insta ExpandedReferenceSelectItem expandedItem = context.CurrentSelectItem as ExpandedReferenceSelectItem; IEdmModel model = context.Model; - DefaultQuerySettings settings = context.QueryContext.DefaultQuerySettings; - if (settings.EnableSkipToken) + DefaultQueryConfigurations queryConfigs = context.QueryContext.DefaultQueryConfigurations; + if (queryConfigs.EnableSkipToken) { if (expandedItem != null) { diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs b/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs index 95ca3556e..94264578e 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs @@ -272,7 +272,7 @@ internal SelectExpandClause ProcessLevels() bool levelsEncountered; bool isMaxLevel; ModelBoundQuerySettings querySettings = Context.Model.GetModelBoundQuerySettings(Context.TargetProperty, - Context.TargetStructuredType, Context.DefaultQuerySettings); + Context.TargetStructuredType, Context.DefaultQueryConfigurations); return ProcessLevels(SelectExpandClause, LevelsMaxLiteralExpansionDepth < 0 ? ODataValidationSettings.DefaultMaxExpansionDepth : LevelsMaxLiteralExpansionDepth, querySettings, diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/CountQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/CountQueryValidator.cs index e17bc2996..626387fe3 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/CountQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/CountQueryValidator.cs @@ -44,7 +44,7 @@ public virtual void Validate(CountQueryOption countQueryOption, ODataValidationS string name = countQueryOption.Context.TargetName; if (EdmHelpers.IsNotCountable(property, structuredType, countQueryOption.Context.Model, - countQueryOption.Context.DefaultQuerySettings.EnableCount)) + countQueryOption.Context.DefaultQueryConfigurations.EnableCount)) { if (property == null) { diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/FilterQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/FilterQueryValidator.cs index a8286523d..a60aecef4 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/FilterQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/FilterQueryValidator.cs @@ -25,7 +25,7 @@ public class FilterQueryValidator : IFilterQueryValidator { private int _currentAnyAllExpressionDepth; private int _currentNodeCount; - private DefaultQuerySettings _defaultQuerySettings; + private DefaultQueryConfigurations _defaultQueryConfigs; private IEdmProperty _property; private IEdmStructuredType _structuredType; @@ -53,7 +53,7 @@ public virtual void Validate(FilterQueryOption filterQueryOption, ODataValidatio _property = filterQueryOption.Context.TargetProperty; _structuredType = filterQueryOption.Context.TargetStructuredType; - _defaultQuerySettings = filterQueryOption.Context.DefaultQuerySettings; + _defaultQueryConfigs = filterQueryOption.Context.DefaultQueryConfigurations; Validate(filterQueryOption.FilterClause, settings, filterQueryOption.Context.Model); } @@ -301,7 +301,7 @@ protected virtual void ValidateNavigationPropertyNode(QueryNode sourceNode, IEdm // Check whether the property is not filterable if (EdmHelpers.IsNotFilterable(navigationProperty, _property, _structuredType, _model, - _defaultQuerySettings.EnableFilter)) + _defaultQueryConfigs.EnableFilter)) { throw new ODataException(Error.Format(SRResources.NotFilterablePropertyUsedInFilter, navigationProperty.Name)); @@ -352,18 +352,18 @@ protected virtual void ValidateSingleValuePropertyAccessNode(SingleValueProperty SingleNavigationNode singleNavigationNode = propertyAccessNode.Source as SingleNavigationNode; notFilterable = EdmHelpers.IsNotFilterable(property, singleNavigationNode.NavigationProperty, singleNavigationNode.NavigationProperty.ToEntityType(), _model, - _defaultQuerySettings.EnableFilter); + _defaultQueryConfigs.EnableFilter); } else if (propertyAccessNode.Source.Kind == QueryNodeKind.SingleComplexNode) { SingleComplexNode singleComplexNode = propertyAccessNode.Source as SingleComplexNode; notFilterable = EdmHelpers.IsNotFilterable(property, singleComplexNode.Property, - property.DeclaringType, _model, _defaultQuerySettings.EnableFilter); + property.DeclaringType, _model, _defaultQueryConfigs.EnableFilter); } else { notFilterable = EdmHelpers.IsNotFilterable(property, _property, _structuredType, _model, - _defaultQuerySettings.EnableFilter); + _defaultQueryConfigs.EnableFilter); } } @@ -392,7 +392,7 @@ protected virtual void ValidateSingleComplexNode(SingleComplexNode singleComplex // Check whether the property is filterable. IEdmProperty property = singleComplexNode.Property; if (EdmHelpers.IsNotFilterable(property, _property, _structuredType, _model, - _defaultQuerySettings.EnableFilter)) + _defaultQueryConfigs.EnableFilter)) { throw new ODataException(Error.Format(SRResources.NotFilterablePropertyUsedInFilter, property.Name)); } @@ -417,7 +417,7 @@ protected virtual void ValidateCollectionPropertyAccessNode(CollectionPropertyAc // Check whether the property is filterable. IEdmProperty property = propertyAccessNode.Property; if (EdmHelpers.IsNotFilterable(property, _property, _structuredType, _model, - _defaultQuerySettings.EnableFilter)) + _defaultQueryConfigs.EnableFilter)) { throw new ODataException(Error.Format(SRResources.NotFilterablePropertyUsedInFilter, property.Name)); } @@ -442,7 +442,7 @@ protected virtual void ValidateCollectionComplexNode(CollectionComplexNode colle // Check whether the property is filterable. IEdmProperty property = collectionComplexNode.Property; if (EdmHelpers.IsNotFilterable(property, _property, _structuredType, _model, - _defaultQuerySettings.EnableFilter)) + _defaultQueryConfigs.EnableFilter)) { throw new ODataException(Error.Format(SRResources.NotFilterablePropertyUsedInFilter, property.Name)); } diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/OrderByQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/OrderByQueryValidator.cs index 9e8bb1f5c..4dd807698 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/OrderByQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/OrderByQueryValidator.cs @@ -43,7 +43,7 @@ public virtual void Validate(OrderByQueryOption orderByOption, ODataValidationSe } } - bool enableOrderBy = orderByOption.Context.DefaultQuerySettings.EnableOrderBy; + bool enableOrderBy = orderByOption.Context.DefaultQueryConfigurations.EnableOrderBy; OrderByModelLimitationsValidator validator = new OrderByModelLimitationsValidator(orderByOption.Context, enableOrderBy); bool explicitAllowedProperties = validationSettings.AllowedOrderByProperties.Count > 0; diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/SelectExpandQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/SelectExpandQueryValidator.cs index e9448b7fa..a1f0fe06b 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/SelectExpandQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/SelectExpandQueryValidator.cs @@ -176,7 +176,7 @@ protected virtual void ValidateExpandedNavigationSelectItem(ExpandedNavigationSe } else if (!isExpandable) { - if (!validatorContext.Context.DefaultQuerySettings.EnableExpand || + if (!validatorContext.Context.DefaultQueryConfigurations.EnableExpand || (expandConfiguration != null && expandConfiguration.ExpandType == SelectExpandType.Disabled)) { throw new ODataException(Error.Format(SRResources.NotExpandablePropertyUsedInExpand, property.Name)); @@ -255,7 +255,7 @@ protected virtual void ValidatePathSelectItem(PathSelectItem pathSelectItem, Sel } IEdmModel edmModel = validatorContext.Context.Model; - bool enableSelect = validatorContext.Context.DefaultQuerySettings.EnableSelect; + bool enableSelect = validatorContext.Context.DefaultQueryConfigurations.EnableSelect; ODataPathSegment segment = pathSelectItem.SelectedPath.LastSegment; IEdmProperty property = validatorContext.Property; @@ -338,7 +338,7 @@ protected virtual void ValidateWildcardSelectItem(WildcardSelectItem wildCardSel foreach (var property in structuredType.StructuralProperties()) { if (EdmHelpers.IsNotSelectable(property, pathProperty, structuredType, edmModel, - validatorContext.Context.DefaultQuerySettings.EnableSelect)) + validatorContext.Context.DefaultQueryConfigurations.EnableSelect)) { throw new ODataException(Error.Format(SRResources.NotSelectablePropertyUsedInSelect, property.Name)); } @@ -400,7 +400,7 @@ protected virtual void ValidateNestedOrderby(OrderByClause orderByClause, Select // TODO: OrderByModelLimitationsValidator is used already. but we should use IOrderbyQueryValidator to validate. // Should change it later. OrderByModelLimitationsValidator orderByQueryValidator = - new OrderByModelLimitationsValidator(validatorContext.Context, validatorContext.Context.DefaultQuerySettings.EnableOrderBy); + new OrderByModelLimitationsValidator(validatorContext.Context, validatorContext.Context.DefaultQueryConfigurations.EnableOrderBy); orderByQueryValidator.TryValidate(validatorContext.Property, validatorContext.StructuredType, orderByClause, false); } @@ -420,10 +420,10 @@ protected virtual void ValidateNestedTop(long? topOption, SelectExpandValidatorC IEdmModel edmModel = validatorContext.Context.Model; IEdmProperty property = validatorContext.Property; IEdmStructuredType structuredType = validatorContext.StructuredType; - DefaultQuerySettings settings = validatorContext.Context.DefaultQuerySettings; + DefaultQueryConfigurations configs = validatorContext.Context.DefaultQueryConfigurations; int maxTop; - if (EdmHelpers.IsTopLimitExceeded(property, structuredType, edmModel, (int)topOption.Value, settings, out maxTop)) + if (EdmHelpers.IsTopLimitExceeded(property, structuredType, edmModel, (int)topOption.Value, configs, out maxTop)) { throw new ODataException(Error.Format(SRResources.SkipTopLimitExceeded, maxTop, AllowedQueryOptions.Top, topOption.Value)); } @@ -452,9 +452,9 @@ protected virtual void ValidateNestedCount(bool? countOption, SelectExpandValida IEdmModel edmModel = validatorContext.Context.Model; IEdmProperty property = validatorContext.Property; IEdmStructuredType structuredType = validatorContext.StructuredType; - DefaultQuerySettings settings = validatorContext.Context.DefaultQuerySettings; + DefaultQueryConfigurations configs = validatorContext.Context.DefaultQueryConfigurations; - if (EdmHelpers.IsNotCountable(property, structuredType, edmModel, settings.EnableCount)) + if (EdmHelpers.IsNotCountable(property, structuredType, edmModel, configs.EnableCount)) { throw new ODataException(Error.Format(SRResources.NotCountablePropertyUsedForCount, property.Name)); } @@ -496,7 +496,7 @@ protected virtual void ValidateNestedLevels(LevelsClause levelsClause, SelectExp } else { - if (!validatorContext.Context.DefaultQuerySettings.EnableExpand || + if (!validatorContext.Context.DefaultQueryConfigurations.EnableExpand || (expandConfiguration != null && expandConfiguration.ExpandType == SelectExpandType.Disabled)) { throw new ODataException(Error.Format(SRResources.NotExpandablePropertyUsedInExpand, property.Name)); diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/SkipTokenQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/SkipTokenQueryValidator.cs index 92c5d6f7f..50db52672 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/SkipTokenQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/SkipTokenQueryValidator.cs @@ -34,8 +34,8 @@ public virtual void Validate(SkipTokenQueryOption skipToken, ODataValidationSett if (skipToken.Context != null) { - DefaultQuerySettings defaultSetting = skipToken.Context.DefaultQuerySettings; - if (!defaultSetting.EnableSkipToken) + DefaultQueryConfigurations defaultConfigs = skipToken.Context.DefaultQueryConfigurations; + if (!defaultConfigs.EnableSkipToken) { throw new ODataException(Error.Format(SRResources.NotAllowedQueryOption, AllowedQueryOptions.SkipToken, "AllowedQueryOptions")); } diff --git a/src/Microsoft.AspNetCore.OData/Query/Validator/TopQueryValidator.cs b/src/Microsoft.AspNetCore.OData/Query/Validator/TopQueryValidator.cs index d7adae400..fbc52db61 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Validator/TopQueryValidator.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Validator/TopQueryValidator.cs @@ -47,7 +47,7 @@ public virtual void Validate(TopQueryOption topQueryOption, ODataValidationSetti property, structuredType, topQueryOption.Context.Model, - topQueryOption.Value, topQueryOption.Context.DefaultQuerySettings, + topQueryOption.Value, topQueryOption.Context.DefaultQueryConfigurations, out maxTop)) { throw new ODataException(Error.Format(SRResources.SkipTopLimitExceeded, maxTop, diff --git a/test/Microsoft.AspNetCore.OData.TestCommon/MockServiceProvider.cs b/test/Microsoft.AspNetCore.OData.TestCommon/MockServiceProvider.cs index 8117efa45..cac63fb02 100644 --- a/test/Microsoft.AspNetCore.OData.TestCommon/MockServiceProvider.cs +++ b/test/Microsoft.AspNetCore.OData.TestCommon/MockServiceProvider.cs @@ -7,9 +7,9 @@ using System; using Microsoft.AspNetCore.OData.Abstracts; +using Microsoft.AspNetCore.OData.Query; using Microsoft.OData; using Microsoft.OData.Edm; -using Microsoft.OData.ModelBuilder.Config; using Microsoft.OData.UriParser; namespace Microsoft.AspNetCore.OData.TestCommon @@ -67,7 +67,7 @@ private static IServiceProvider BuilderDefaultServiceProvider(Action new DefaultQuerySettings()); + odataContainerBuilder.AddService(ServiceLifetime.Singleton, sp => new DefaultQueryConfigurations()); odataContainerBuilder.AddService(ServiceLifetime.Singleton, typeof(ODataUriResolver), sp => new UnqualifiedODataUriResolver { EnableCaseInsensitive = true }); diff --git a/test/Microsoft.AspNetCore.OData.Tests/ODataOptionsTests.cs b/test/Microsoft.AspNetCore.OData.Tests/ODataOptionsTests.cs index 97284f92a..5fbfd81e9 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/ODataOptionsTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/ODataOptionsTests.cs @@ -284,13 +284,13 @@ public void SetMaxTop_SetMaxTopValue() { // Arrange ODataOptions options = new ODataOptions(); - Assert.Equal(0, options.QuerySettings.MaxTop); // Guard + Assert.Equal(0, options.QueryConfigurations.MaxTop); // Guard // Act options.SetMaxTop(2); // Assert - Assert.Equal(2, options.QuerySettings.MaxTop.Value); + Assert.Equal(2, options.QueryConfigurations.MaxTop.Value); } [Fact] @@ -298,13 +298,13 @@ public void Expand_SetExpand() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableExpand); // Guard + Assert.False(options.QueryConfigurations.EnableExpand); // Guard // Act options.Expand(); // Assert - Assert.True(options.QuerySettings.EnableExpand); + Assert.True(options.QueryConfigurations.EnableExpand); } [Fact] @@ -312,13 +312,13 @@ public void Select_SetSelect() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableSelect); // Guard + Assert.False(options.QueryConfigurations.EnableSelect); // Guard // Act options.Select(); // Assert - Assert.True(options.QuerySettings.EnableSelect); + Assert.True(options.QueryConfigurations.EnableSelect); } [Fact] @@ -326,13 +326,13 @@ public void Filter_SetFilter() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableFilter); // Guard + Assert.False(options.QueryConfigurations.EnableFilter); // Guard // Act options.Filter(); // Assert - Assert.True(options.QuerySettings.EnableFilter); + Assert.True(options.QueryConfigurations.EnableFilter); } [Fact] @@ -340,13 +340,13 @@ public void OrderBy_SetOrderBy() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableOrderBy); // Guard + Assert.False(options.QueryConfigurations.EnableOrderBy); // Guard // Act options.OrderBy(); // Assert - Assert.True(options.QuerySettings.EnableOrderBy); + Assert.True(options.QueryConfigurations.EnableOrderBy); } [Fact] @@ -354,13 +354,13 @@ public void Count_SetCount() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableCount); // Guard + Assert.False(options.QueryConfigurations.EnableCount); // Guard // Act options.Count(); // Assert - Assert.True(options.QuerySettings.EnableCount); + Assert.True(options.QueryConfigurations.EnableCount); } [Fact] @@ -368,13 +368,13 @@ public void SkipToken_SetSkipToken() { // Arrange ODataOptions options = new ODataOptions(); - Assert.False(options.QuerySettings.EnableSkipToken); // Guard + Assert.False(options.QueryConfigurations.EnableSkipToken); // Guard // Act options.SkipToken(); // Assert - Assert.True(options.QuerySettings.EnableSkipToken); + Assert.True(options.QueryConfigurations.EnableSkipToken); } #endregion diff --git a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net6.bsl b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net6.bsl index 06096caf0..a3ca963cc 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net6.bsl +++ b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net6.bsl @@ -102,7 +102,7 @@ public class Microsoft.AspNetCore.OData.ODataOptions { bool EnableAttributeRouting { public get; public set; } bool EnableContinueOnErrorHeader { public get; public set; } bool EnableNoDollarQueryOptions { public get; public set; } - Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings QuerySettings { public get; } + Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations QueryConfigurations { public get; } [ TupleElementNamesAttribute(), ] @@ -1271,6 +1271,18 @@ public class Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser : I public virtual System.Threading.Tasks.Task`1[[System.String]] ParseAsync (Microsoft.AspNetCore.Http.HttpRequest request) } +public class Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations { + public DefaultQueryConfigurations () + + bool EnableCount { public get; public set; } + bool EnableExpand { public get; public set; } + bool EnableFilter { public get; public set; } + bool EnableOrderBy { public get; public set; } + bool EnableSelect { public get; public set; } + bool EnableSkipToken { public get; public set; } + System.Nullable`1[[System.Int32]] MaxTop { public get; public set; } +} + public class Microsoft.AspNetCore.OData.Query.DefaultSkipTokenHandler : Microsoft.AspNetCore.OData.Query.SkipTokenHandler { public DefaultSkipTokenHandler () @@ -1353,7 +1365,7 @@ public class Microsoft.AspNetCore.OData.Query.ODataQueryContext { public ODataQueryContext (Microsoft.OData.Edm.IEdmModel model, Microsoft.OData.Edm.IEdmType elementType, Microsoft.OData.UriParser.ODataPath path) public ODataQueryContext (Microsoft.OData.Edm.IEdmModel model, System.Type elementClrType, Microsoft.OData.UriParser.ODataPath path) - Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings DefaultQuerySettings { public get; } + Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations DefaultQueryConfigurations { public get; } System.Type ElementClrType { public get; } Microsoft.OData.Edm.IEdmType ElementType { public get; } Microsoft.OData.Edm.IEdmModel Model { public get; } diff --git a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl index 06096caf0..a3ca963cc 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl +++ b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl @@ -102,7 +102,7 @@ public class Microsoft.AspNetCore.OData.ODataOptions { bool EnableAttributeRouting { public get; public set; } bool EnableContinueOnErrorHeader { public get; public set; } bool EnableNoDollarQueryOptions { public get; public set; } - Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings QuerySettings { public get; } + Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations QueryConfigurations { public get; } [ TupleElementNamesAttribute(), ] @@ -1271,6 +1271,18 @@ public class Microsoft.AspNetCore.OData.Query.DefaultODataQueryRequestParser : I public virtual System.Threading.Tasks.Task`1[[System.String]] ParseAsync (Microsoft.AspNetCore.Http.HttpRequest request) } +public class Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations { + public DefaultQueryConfigurations () + + bool EnableCount { public get; public set; } + bool EnableExpand { public get; public set; } + bool EnableFilter { public get; public set; } + bool EnableOrderBy { public get; public set; } + bool EnableSelect { public get; public set; } + bool EnableSkipToken { public get; public set; } + System.Nullable`1[[System.Int32]] MaxTop { public get; public set; } +} + public class Microsoft.AspNetCore.OData.Query.DefaultSkipTokenHandler : Microsoft.AspNetCore.OData.Query.SkipTokenHandler { public DefaultSkipTokenHandler () @@ -1353,7 +1365,7 @@ public class Microsoft.AspNetCore.OData.Query.ODataQueryContext { public ODataQueryContext (Microsoft.OData.Edm.IEdmModel model, Microsoft.OData.Edm.IEdmType elementType, Microsoft.OData.UriParser.ODataPath path) public ODataQueryContext (Microsoft.OData.Edm.IEdmModel model, System.Type elementClrType, Microsoft.OData.UriParser.ODataPath path) - Microsoft.OData.ModelBuilder.Config.DefaultQuerySettings DefaultQuerySettings { public get; } + Microsoft.AspNetCore.OData.Query.DefaultQueryConfigurations DefaultQueryConfigurations { public get; } System.Type ElementClrType { public get; } Microsoft.OData.Edm.IEdmType ElementType { public get; } Microsoft.OData.Edm.IEdmModel Model { public get; } diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/EnableQueryAttributeTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/EnableQueryAttributeTests.cs index 8d75804c1..dd79825db 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/EnableQueryAttributeTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/EnableQueryAttributeTests.cs @@ -644,9 +644,9 @@ public void ValidateQuery_Accepts_All_Supported_QueryNames(string query) HttpRequest request = RequestFactory.Create("Get", "http://localhost/?" + query); var context = new ODataQueryContext(_model, typeof(QCustomer)); - context.DefaultQuerySettings.EnableFilter = true; - context.DefaultQuerySettings.EnableOrderBy = true; - context.DefaultQuerySettings.MaxTop = null; + context.DefaultQueryConfigurations.EnableFilter = true; + context.DefaultQueryConfigurations.EnableOrderBy = true; + context.DefaultQueryConfigurations.MaxTop = null; var options = new ODataQueryOptions(context, request); // Act & Assert diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Query/DefaultSkipTokenHandlerTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Query/DefaultSkipTokenHandlerTests.cs index f60b3aebc..0e1147dc6 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Query/DefaultSkipTokenHandlerTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Query/DefaultSkipTokenHandlerTests.cs @@ -301,7 +301,7 @@ private ODataSerializerContext GetSerializerContext(IEdmModel model, bool enable IEdmType edmType = entitySet.Type; ODataPath path = new ODataPath(new EntitySetSegment(entitySet)); ODataQueryContext queryContext = new ODataQueryContext(model, edmType, path); - queryContext.DefaultQuerySettings.EnableSkipToken = enableSkipToken; + queryContext.DefaultQueryConfigurations.EnableSkipToken = enableSkipToken; var request = RequestFactory.Create(opt => opt.AddRouteComponents(model)); ResourceContext resource = new ResourceContext(); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/FilterQueryValidatorTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/FilterQueryValidatorTests.cs index dd5999074..6c5c3cd86 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/FilterQueryValidatorTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/FilterQueryValidatorTests.cs @@ -29,7 +29,7 @@ public class FilterQueryValidatorTests public FilterQueryValidatorTests() { _context = ValidationTestHelper.CreateCustomerContext(); - _context.DefaultQuerySettings.EnableFilter = true; + _context.DefaultQueryConfigurations.EnableFilter = true; _productContext = ValidationTestHelper.CreateDerivedProductsContext(); _validator = new MyFilterValidator(); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/OrderByQueryValidatorTest.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/OrderByQueryValidatorTest.cs index 2b4c7a4c4..d41c2782b 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/OrderByQueryValidatorTest.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/OrderByQueryValidatorTest.cs @@ -237,7 +237,7 @@ public void ValidateOrderByQueryValidator_ThrowsIfTryingToValidateALimitedProper IEdmModel model = GetEdmModel(); IEdmEntityType edmType = model.SchemaElements.OfType().Single(t => t.Name == edmTypeName); ODataQueryContext context = new ODataQueryContext(model, edmType); - context.DefaultQuerySettings.EnableOrderBy = true; + context.DefaultQueryConfigurations.EnableOrderBy = true; OrderByQueryOption option = new OrderByQueryOption(query, context); ODataValidationSettings settings = new ODataValidationSettings(); @@ -289,7 +289,7 @@ public void ValidateOrderByQueryValidator_NoException_ForParameterAlias() IEdmEntitySet entitySet = model.FindDeclaredEntitySet("LimitedEntities"); Assert.NotNull(entitySet); ODataQueryContext context = new ODataQueryContext(model, edmType); - context.DefaultQuerySettings.EnableOrderBy = true; + context.DefaultQueryConfigurations.EnableOrderBy = true; OrderByQueryOption option = new OrderByQueryOption( "@p,@q desc", diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SelectExpandQueryValidatorTest.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SelectExpandQueryValidatorTest.cs index 30c63939b..e382f5d11 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SelectExpandQueryValidatorTest.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SelectExpandQueryValidatorTest.cs @@ -37,7 +37,7 @@ public SelectExpandQueryValidatorTest() model.Model.SetAnnotationValue(model.Customer, new ClrTypeAnnotation(typeof(Customer))); _queryContext = new ODataQueryContext(model.Model, typeof(Customer), null); _queryContext.RequestContainer = new MockServiceProvider(); - _queryContext.DefaultQuerySettings.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; } [Fact] @@ -95,7 +95,7 @@ public void ValidateSelectExpandQueryValidator_DepthChecks_QuerySettings(string CustomersModelWithInheritance model = new CustomersModelWithInheritance(); model.Model.SetAnnotationValue(model.Customer, new ClrTypeAnnotation(typeof(Customer))); ODataQueryContext queryContext = new ODataQueryContext(model.Model, typeof(Customer)); - queryContext.DefaultQuerySettings.EnableExpand = true; + queryContext.DefaultQueryConfigurations.EnableExpand = true; queryContext.RequestContainer = new MockServiceProvider(); SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, queryContext); selectExpandQueryOption.LevelsMaxLiteralExpansionDepth = 1; @@ -130,7 +130,7 @@ public void ValidateSelectExpandQueryValidator_DepthChecks_DollarLevels(string e builder.EntitySet("Entities"); IEdmModel model = builder.GetEdmModel(); var context = new ODataQueryContext(model, typeof(ODataLevelsTest.LevelsEntity)); - context.DefaultQuerySettings.EnableExpand = true; + context.DefaultQueryConfigurations.EnableExpand = true; context.RequestContainer = new MockServiceProvider(); var selectExpandQueryOption = new SelectExpandQueryOption(null, expand, context); selectExpandQueryOption.LevelsMaxLiteralExpansionDepth = 1; @@ -161,7 +161,7 @@ public void ValidateSelectExpandQueryValidator_DoesNotThrow_IfExpansionDepthIsZe builder.EntitySet("Entities"); IEdmModel model = builder.GetEdmModel(); var context = new ODataQueryContext(model, typeof(ODataLevelsTest.LevelsEntity)); - context.DefaultQuerySettings.EnableExpand = true; + context.DefaultQueryConfigurations.EnableExpand = true; context.RequestContainer = new MockServiceProvider(); var selectExpandQueryOption = new SelectExpandQueryOption(null, expand, context); @@ -182,7 +182,7 @@ public void ValidateSelectExpandQueryValidator_Throws_LevelsMaxLiteralExpansionD builder.EntitySet("Entities"); IEdmModel model = builder.GetEdmModel(); var context = new ODataQueryContext(model, typeof(ODataLevelsTest.LevelsEntity)); - context.DefaultQuerySettings.EnableExpand = true; + context.DefaultQueryConfigurations.EnableExpand = true; context.RequestContainer = new MockServiceProvider(); var selectExpandQueryOption = new SelectExpandQueryOption(null, expand, context); selectExpandQueryOption.LevelsMaxLiteralExpansionDepth = 4; @@ -208,7 +208,7 @@ public void ValidateSelectExpandQueryValidator_DoesNotThrow_DefaultLevelsMaxLite builder.EntitySet("Entities"); IEdmModel model = builder.GetEdmModel(); var context = new ODataQueryContext(model, typeof(ODataLevelsTest.LevelsEntity)); - context.DefaultQuerySettings.EnableExpand = true; + context.DefaultQueryConfigurations.EnableExpand = true; context.RequestContainer = new MockServiceProvider(); var selectExpandQueryOption = new SelectExpandQueryOption(null, expand, context); @@ -256,7 +256,7 @@ public void ValidateSelectExpandQueryValidator_DoesNotThrow_LevelsMaxLiteralExpa builder.EntitySet("Entities"); IEdmModel model = builder.GetEdmModel(); var context = new ODataQueryContext(model, typeof(ODataLevelsTest.LevelsEntity)); - context.DefaultQuerySettings.EnableExpand = true; + context.DefaultQueryConfigurations.EnableExpand = true; context.RequestContainer = new MockServiceProvider(); var selectExpandQueryOption = new SelectExpandQueryOption(null, expand, context); selectExpandQueryOption.LevelsMaxLiteralExpansionDepth = levelsMaxLiteralExpansionDepth; @@ -274,8 +274,8 @@ public void ValidateSelectExpandQueryValidator_Throws_IfNotAllowTop() // Arrange string expand = "Orders($top=4)"; SelectExpandQueryValidator validator = new SelectExpandQueryValidator(); - _queryContext.DefaultQuerySettings.EnableExpand = true; - _queryContext.DefaultQuerySettings.MaxTop = 2; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.MaxTop = 2; SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, _queryContext); // Act & Assert @@ -290,8 +290,8 @@ public void ValidateSelectExpandQueryValidator_Throws_IfNotAllowCount() // Arrange string expand = "Orders($count=true)"; SelectExpandQueryValidator validator = new SelectExpandQueryValidator(); - _queryContext.DefaultQuerySettings.EnableExpand = true; - _queryContext.DefaultQuerySettings.EnableCount = false; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.EnableCount = false; SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, _queryContext); // Act & Assert @@ -306,8 +306,8 @@ public void ValidateSelectExpandQueryValidator_Throws_IfNotAllowOrderby() // Arrange string expand = "Orders($orderby=Amount)"; SelectExpandQueryValidator validator = new SelectExpandQueryValidator(); - _queryContext.DefaultQuerySettings.EnableExpand = true; - _queryContext.DefaultQuerySettings.EnableOrderBy = false; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.EnableOrderBy = false; SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, _queryContext); // Act & Assert @@ -322,8 +322,8 @@ public void ValidateSelectExpandQueryValidator_Throws_IfNotAllowFilter() // Arrange string expand = "Orders($filter=Amount eq 42)"; SelectExpandQueryValidator validator = new SelectExpandQueryValidator(); - _queryContext.DefaultQuerySettings.EnableExpand = true; - _queryContext.DefaultQuerySettings.EnableFilter = false; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.EnableFilter = false; SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, _queryContext); // Act & Assert @@ -338,7 +338,7 @@ public void ValidateSelectExpandQueryValidator_DoesNotThrow_IfExpansionDepthIsZe // Arrange string expand = "Orders($expand=Customer($expand=Orders($expand=Customer($expand=Orders($expand=Customer)))))"; SelectExpandQueryValidator validator = new SelectExpandQueryValidator(); - _queryContext.DefaultQuerySettings.EnableExpand = true; + _queryContext.DefaultQueryConfigurations.EnableExpand = true; SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, _queryContext); // Act & Assert @@ -356,7 +356,7 @@ public void ValidateSelectExpandQueryValidator_DoesNotThrow_IfExpansionDepthIsZe CustomersModelWithInheritance model = new CustomersModelWithInheritance(); model.Model.SetAnnotationValue(model.Customer, new ClrTypeAnnotation(typeof(Customer))); ODataQueryContext queryContext = new ODataQueryContext(model.Model, typeof(Customer)); - queryContext.DefaultQuerySettings.EnableExpand = true; + queryContext.DefaultQueryConfigurations.EnableExpand = true; queryContext.RequestContainer = new MockServiceProvider(); SelectExpandQueryOption selectExpandQueryOption = new SelectExpandQueryOption(null, expand, queryContext); IEdmStructuredType customerType = @@ -490,7 +490,7 @@ public void GetSelectExpandQueryValidator_Returns_Validator() // Arrange & Act & Assert IServiceProvider services = new ServiceCollection() .AddSingleton() - .AddSingleton().BuildServiceProvider(); + .AddSingleton().BuildServiceProvider(); context.RequestContainer = services; Assert.NotNull(context.GetSelectExpandQueryValidator()); } diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SkipTokenQueryValidatorTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SkipTokenQueryValidatorTests.cs index 59ee4813b..d8fe5b155 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SkipTokenQueryValidatorTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/SkipTokenQueryValidatorTests.cs @@ -45,7 +45,7 @@ public void ValidateSkipTokenQueryValidator_ThrowsNotAllowedQueryOption() ODataValidationSettings settings = new ODataValidationSettings(); ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int), null); - context.DefaultQuerySettings.EnableSkipToken = false; + context.DefaultQueryConfigurations.EnableSkipToken = false; SkipTokenQueryOption query = new SkipTokenQueryOption("abc", context); SkipTokenQueryValidator validator = new SkipTokenQueryValidator(); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/ValidationTestHelper.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/ValidationTestHelper.cs index fa0e65603..84b181a3e 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/ValidationTestHelper.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Validator/ValidationTestHelper.cs @@ -29,8 +29,8 @@ internal static ODataQueryContext CreateCustomerContext(bool setRequestContainer context.RequestContainer = new MockServiceProvider(); } - context.DefaultQuerySettings.EnableOrderBy = true; - context.DefaultQuerySettings.MaxTop = null; + context.DefaultQueryConfigurations.EnableOrderBy = true; + context.DefaultQueryConfigurations.MaxTop = null; return context; } @@ -43,7 +43,7 @@ internal static ODataQueryContext CreateDerivedProductsContext() { ODataQueryContext context = new ODataQueryContext(GetDerivedProductsModel(), typeof(Product), null); context.RequestContainer = new MockServiceProvider(); - context.DefaultQuerySettings.EnableFilter = true; + context.DefaultQueryConfigurations.EnableFilter = true; return context; }