public static void SetDefaultQuerySettings(this IServiceProvider serviceProvider, DefaultQuerySettings defaultQuerySettings) { if (serviceProvider == null) { throw Error.ArgumentNull(nameof(serviceProvider)); } if (defaultQuerySettings == null) { throw Error.ArgumentNull(nameof(defaultQuerySettings)); } if (!defaultQuerySettings.MaxTop.HasValue || defaultQuerySettings.MaxTop > 0) { ModelBoundQuerySettings.DefaultModelBoundQuerySettings.MaxTop = defaultQuerySettings.MaxTop; } DefaultQuerySettings querySettings = serviceProvider.GetRequiredService <DefaultQuerySettings>(); if (querySettings == null) { throw Error.InvalidOperation(SRResources.MissingODataServices, nameof(DefaultQuerySettings)); } querySettings = defaultQuerySettings; }
/// <summary> /// Sets the <see cref="DefaultQuerySettings"/> in route builder. /// </summary> /// <param name="builder">The <see cref="IRouteBuilder"/>.</param> /// <param name="defaultQuerySettings">The default query settings.</param> public static IRouteBuilder SetDefaultQuerySettings(this IRouteBuilder builder, DefaultQuerySettings defaultQuerySettings) { if (builder == null) { throw Error.ArgumentNull("builder"); } if (defaultQuerySettings == null) { throw Error.ArgumentNull("defaultQuerySettings"); } if (!defaultQuerySettings.MaxTop.HasValue || defaultQuerySettings.MaxTop > 0) { ModelBoundQuerySettings.DefaultModelBoundQuerySettings.MaxTop = defaultQuerySettings.MaxTop; } DefaultQuerySettings querySettings = builder.ServiceProvider.GetRequiredService <DefaultQuerySettings>(); if (querySettings == null) { throw Error.InvalidOperation(SRResources.MissingODataServices, nameof(DefaultQuerySettings)); } querySettings = defaultQuerySettings; return(builder); }
public void apply_to_should_use_default_query_settings() { // arrange var description = NewApiDescription(); var defaultQuerySettings = new DefaultQuerySettings() { EnableCount = true, EnableExpand = true, EnableFilter = true, EnableOrderBy = true, EnableSelect = true, }; var validationSettings = new ODataValidationSettings() { AllowedQueryOptions = AllowedQueryOptions.None }; var settings = new TestODataQueryOptionSettings(typeof(object), defaultQuerySettings); var convention = new ODataValidationSettingsConvention(validationSettings, settings); // act convention.ApplyTo(description); // assert description.ParameterDescriptions.Count.Should().Be(5); }
/// <summary> /// Sets the EnableCount of <see cref="DefaultQuerySettings"/> in the configuration, /// depends on <see cref="QueryOptionSetting"/>. /// </summary> public static HttpConfiguration Count(this HttpConfiguration configuration, QueryOptionSetting setting) { DefaultQuerySettings defaultQuerySettings = configuration.GetDefaultQuerySettings(); defaultQuerySettings.EnableCount = setting == QueryOptionSetting.Allowed; return(configuration); }
/// <summary> /// Sets the EnableCount to true of <see cref="DefaultQuerySettings"/> in the configuration. /// </summary> public static HttpConfiguration Count(this HttpConfiguration configuration) { DefaultQuerySettings defaultQuerySettings = configuration.GetDefaultQuerySettings(); defaultQuerySettings.EnableCount = true; return(configuration); }
/// <summary> /// Validates a <see cref="SelectExpandQueryOption" />. /// </summary> /// <param name="selectExpandQueryOption">The $select and $expand query.</param> /// <param name="validationSettings">The validation settings.</param> public virtual void Validate(SelectExpandQueryOption selectExpandQueryOption, ODataValidationSettings validationSettings) { if (selectExpandQueryOption == null) { throw Error.ArgumentNull(nameof(selectExpandQueryOption)); } if (validationSettings == null) { throw Error.ArgumentNull(nameof(validationSettings)); } _defaultQuerySettings = selectExpandQueryOption.Context.DefaultQuerySettings; _orderByQueryValidator = new OrderByModelLimitationsValidator(selectExpandQueryOption.Context, _defaultQuerySettings.EnableOrderBy); _selectExpandQueryOption = selectExpandQueryOption; ValidateRestrictions(null, 0, selectExpandQueryOption.SelectExpandClause, null, validationSettings); if (validationSettings.MaxExpansionDepth > 0) { if (selectExpandQueryOption.LevelsMaxLiteralExpansionDepth < 0) { selectExpandQueryOption.LevelsMaxLiteralExpansionDepth = validationSettings.MaxExpansionDepth; } else if (selectExpandQueryOption.LevelsMaxLiteralExpansionDepth > validationSettings.MaxExpansionDepth) { throw new ODataException(Error.Format( SRResources.InvalidExpansionDepthValue, "LevelsMaxLiteralExpansionDepth", "MaxExpansionDepth")); } ValidateDepth(selectExpandQueryOption.SelectExpandClause, validationSettings.MaxExpansionDepth); } }
/// <summary> /// Sets the EnableSkipToken to true of <see cref="DefaultQuerySettings"/> in the configuration. /// </summary> public static HttpConfiguration SkipToken(this HttpConfiguration configuration) { DefaultQuerySettings defaultQuerySettings = configuration.GetDefaultQuerySettings(); defaultQuerySettings.EnableSkipToken = true; return(configuration); }
/// <summary> /// Sets the EnableOrderBy to true of <see cref="DefaultQuerySettings"/> in the configuration. /// </summary> public static HttpConfiguration OrderBy(this HttpConfiguration configuration) { DefaultQuerySettings defaultQuerySettings = configuration.GetDefaultQuerySettings(); defaultQuerySettings.EnableOrderBy = true; return(configuration); }
private static ModelBoundQuerySettings GetModelBoundQuerySettings <T>(T key, IEdmModel edmModel, DefaultQuerySettings defaultQuerySettings = null) where T : IEdmElement { Contract.Assert(edmModel != null); if (key == null) { return(null); } else { ModelBoundQuerySettings querySettings = edmModel.GetAnnotationValue <ModelBoundQuerySettings>(key); if (querySettings == null) { querySettings = new ModelBoundQuerySettings(); if (defaultQuerySettings != null && (!defaultQuerySettings.MaxTop.HasValue || defaultQuerySettings.MaxTop > 0)) { querySettings.MaxTop = defaultQuerySettings.MaxTop; } } return(querySettings); } }
internal virtual void Validate(IEdmProperty property, IEdmStructuredType structuredType, FilterClause filterClause, ODataValidationSettings settings, IEdmModel model, DefaultQuerySettings querySettings) { _property = property; _structuredType = structuredType; _defaultQuerySettings = querySettings; Validate(filterClause, settings, model); }
internal TestODataQueryOptionSettings(Type type, DefaultQuerySettings defaultQuerySettings, bool dollarPrefix = true) { MockDescriptionProvider = new Mock <IODataQueryOptionDescriptionProvider>(); MockDescriptionProvider.Setup(p => p.Describe(It.IsAny <AllowedQueryOptions>(), It.IsAny <ODataQueryOptionDescriptionContext>())).Returns("Test"); NoDollarPrefix = !dollarPrefix; DescriptionProvider = MockDescriptionProvider.Object; ModelMetadataProvider = NewModelMetadataProvider(type); DefaultQuerySettings = defaultQuerySettings; }
public QueryValidator1Attribute() { defaultQuerySettings = new DefaultQuerySettings { EnableExpand = true, EnableSelect = true, EnableCount = true, EnableFilter = true }; }
public static void Select(this IServiceProvider serviceProvider, QueryOptionSetting setting) { if (serviceProvider == null) { throw Error.ArgumentNull(nameof(serviceProvider)); } DefaultQuerySettings defaultQuerySettings = serviceProvider.GetDefaultQuerySettings(); defaultQuerySettings.EnableSelect = setting == QueryOptionSetting.Allowed; }
public static void Expand(this IServiceProvider serviceProvider) { if (serviceProvider == null) { throw Error.ArgumentNull(nameof(serviceProvider)); } DefaultQuerySettings defaultQuerySettings = serviceProvider.GetDefaultQuerySettings(); defaultQuerySettings.EnableExpand = true; }
public static void SkipToken(this IServiceProvider serviceProvider) { if (serviceProvider == null) { throw Error.ArgumentNull("serviceProvider"); } DefaultQuerySettings defaultQuerySettings = serviceProvider.GetDefaultQuerySettings(); defaultQuerySettings.EnableSkipToken = true; }
public static void Expand(this IServiceProvider serviceProvider, QueryOptionSetting setting) { if (serviceProvider == null) { throw Error.ArgumentNull("serviceProvider"); } DefaultQuerySettings defaultQuerySettings = serviceProvider.GetDefaultQuerySettings(); defaultQuerySettings.EnableExpand = setting == QueryOptionSetting.Allowed; }
/// <summary> /// Sets the MaxTop of <see cref="DefaultQuerySettings"/> in the configuration. /// </summary> public static HttpConfiguration MaxTop(this HttpConfiguration configuration, int?maxTopValue) { DefaultQuerySettings defaultQuerySettings = configuration.GetDefaultQuerySettings(); defaultQuerySettings.MaxTop = maxTopValue; if (!maxTopValue.HasValue || maxTopValue > 0) { ModelBoundQuerySettings.DefaultModelBoundQuerySettings.MaxTop = maxTopValue; } return(configuration); }
/// <summary> /// Sets the EnableCount of <see cref="DefaultQuerySettings"/> in route builder, /// depends on <see cref="QueryOptionSetting"/>. /// </summary> public static IRouteBuilder Count(this IRouteBuilder builder, QueryOptionSetting setting) { if (builder == null) { throw Error.ArgumentNull("builder"); } DefaultQuerySettings defaultQuerySettings = builder.GetDefaultQuerySettings(); defaultQuerySettings.EnableCount = setting == QueryOptionSetting.Allowed; return(builder); }
/// <summary> /// Sets the EnableCount to true of <see cref="DefaultQuerySettings"/> in route builder. /// </summary> public static IRouteBuilder Count(this IRouteBuilder builder) { if (builder == null) { throw Error.ArgumentNull("builder"); } DefaultQuerySettings defaultQuerySettings = builder.GetDefaultQuerySettings(); defaultQuerySettings.EnableCount = true; return(builder); }
/// <summary> /// Gets the <see cref="DefaultQuerySettings"/> from the configuration. /// </summary> /// <param name="configuration">The server configuration.</param> public static DefaultQuerySettings GetDefaultQuerySettings(this HttpConfiguration configuration) { object instance; if (!configuration.Properties.TryGetValue(DefaultQuerySettingsKey, out instance)) { DefaultQuerySettings defaultQuerySettings = new DefaultQuerySettings(); configuration.SetDefaultQuerySettings(defaultQuerySettings); return(defaultQuerySettings); } return(instance as DefaultQuerySettings); }
public static bool IsTopLimitExceeded(IEdmProperty property, IEdmStructuredType structuredType, IEdmModel edmModel, int top, DefaultQuerySettings defaultQuerySettings, out int maxTop) { maxTop = 0; ModelBoundQuerySettings querySettings = GetModelBoundQuerySettings(property, structuredType, edmModel, defaultQuerySettings); if (querySettings != null && top > querySettings.MaxTop) { maxTop = querySettings.MaxTop.Value; return(true); } return(false); }
public void UseAutoPocoSetsUpOdataOnHttpConfig() { builder.UseAutoPoco(config); Assert.IsInstanceOfType(config.Properties.First(c => (string)c.Key == "Microsoft.AspNet.OData.NonODataRootContainerKey").Value, typeof(ServiceProvider)); Assert.IsInstanceOfType(config.Properties.First(c => (string)c.Key == "Microsoft.AspNet.OData.PerRouteContainerKey").Value, typeof(Microsoft.AspNet.OData.PerRouteContainer)); DefaultQuerySettings odataSettings = (DefaultQuerySettings)config.Properties.First(c => (string)c.Key == "Microsoft.AspNet.OData.DefaultQuerySettings").Value; Assert.IsTrue(odataSettings.EnableCount); Assert.IsTrue(odataSettings.EnableOrderBy); Assert.IsTrue(odataSettings.EnableExpand); Assert.IsTrue(odataSettings.EnableSelect); Assert.AreEqual(1000, odataSettings.MaxTop); }
public static void MaxTop(this IServiceProvider serviceProvider, int?maxTopValue) { if (serviceProvider == null) { throw Error.ArgumentNull(nameof(serviceProvider)); } DefaultQuerySettings defaultQuerySettings = serviceProvider.GetDefaultQuerySettings(); defaultQuerySettings.MaxTop = maxTopValue; if (!maxTopValue.HasValue || maxTopValue > 0) { ModelBoundQuerySettings.DefaultModelBoundQuerySettings.MaxTop = maxTopValue; } }
public static DefaultQuerySettings GetDefaultQuerySettings(this IServiceProvider serviceProvider) { if (serviceProvider == null) { throw Error.ArgumentNull(nameof(serviceProvider)); } DefaultQuerySettings querySettings = serviceProvider.GetRequiredService <DefaultQuerySettings>(); if (querySettings == null) { throw Error.InvalidOperation(SRResources.MissingODataServices, nameof(DefaultQuerySettings)); } return(querySettings); }
public void ConfigureServices_CanSet_QueryConfiguration() { // Arrange HttpConfiguration config = new HttpConfiguration(); // Act config.Filter().Count(QueryOptionSetting.Disabled).Expand().OrderBy().MaxTop(10); DefaultQuerySettings defaultQuerySettings = config.GetDefaultQuerySettings(); // Assert Assert.True(defaultQuerySettings.EnableFilter); Assert.False(defaultQuerySettings.EnableCount); Assert.True(defaultQuerySettings.EnableExpand); Assert.True(defaultQuerySettings.EnableOrderBy); Assert.Equal(10, defaultQuerySettings.MaxTop); }
/// <summary> /// Sets the MaxTop of <see cref="DefaultQuerySettings"/> in route builder. /// </summary> public static IRouteBuilder MaxTop(this IRouteBuilder builder, int?maxTopValue) { if (builder == null) { throw Error.ArgumentNull("builder"); } DefaultQuerySettings defaultQuerySettings = builder.GetDefaultQuerySettings(); defaultQuerySettings.MaxTop = maxTopValue; if (!maxTopValue.HasValue || maxTopValue > 0) { ModelBoundQuerySettings.DefaultModelBoundQuerySettings.MaxTop = maxTopValue; } return(builder); }
public void UseAutoPocoSetsUpOdata() { IApplicationBuilder appBuilder = null; builder = c => appBuilder = c.UseAutoPoco(); _ = new TestServer(hostBuilder); Assert.IsNotNull(appBuilder.ApplicationServices.GetService <ODataOptions>()); Assert.IsNotNull(appBuilder.ApplicationServices.GetService <IPerRouteContainer>()); DefaultQuerySettings odataSettings = appBuilder.ApplicationServices.GetService <DefaultQuerySettings>(); Assert.IsTrue(odataSettings.EnableCount); Assert.IsTrue(odataSettings.EnableOrderBy); Assert.IsTrue(odataSettings.EnableExpand); Assert.IsTrue(odataSettings.EnableSelect); Assert.AreEqual(1000, odataSettings.MaxTop); }
public override void ValidateQuery(HttpRequest request, ODataQueryOptions queryOptions) { if (queryOptions.Filter != null) { // Filter is must! var settings = new DefaultQuerySettings { EnableFilter = true, EnableSkipToken = true, EnableCount = true, EnableExpand = true, EnableOrderBy = true, EnableSelect = true, MaxTop = 100, }; queryOptions.Filter.Validator = new HomeIDQueryValidator(settings); } base.ValidateQuery(request, queryOptions); }
/// <summary> /// Validates a <see cref="SkipTokenQueryOption" />. /// </summary> /// <param name="skipToken">The $skiptoken query.</param> /// <param name="validationSettings">The validation settings.</param> public virtual void Validate(SkipTokenQueryOption skipToken, ODataValidationSettings validationSettings) { if (skipToken == null) { throw Error.ArgumentNull(nameof(skipToken)); } if (validationSettings == null) { throw Error.ArgumentNull(nameof(validationSettings)); } if (skipToken.Context != null) { DefaultQuerySettings defaultSetting = skipToken.Context.DefaultQuerySettings; if (!defaultSetting.EnableSkipToken) { throw new ODataException(Error.Format(SRResources.NotAllowedQueryOption, AllowedQueryOptions.SkipToken, "AllowedQueryOptions")); } } }
/// <summary> /// Initializes a new instance of the <see cref="ODataApiDescriptionProvider"/> class. /// </summary> /// <param name="routeCollectionProvider">The <see cref="IODataRouteCollectionProvider">OData route collection provider</see> associated with the description provider.</param> /// <param name="inlineConstraintResolver">The <see cref="IInlineConstraintResolver">inline constraint resolver</see> used to parse route template constraints.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider">provider</see> used to retrieve model metadata.</param> /// <param name="defaultQuerySettings">The OData <see cref="DefaultQuerySettings">default query setting</see>.</param> /// <param name="options">The <see cref="IOptions{TOptions}">container</see> of configured <see cref="ODataApiExplorerOptions">API explorer options</see>.</param> /// <param name="mvcOptions">A <see cref="IOptions{TOptions}">holder</see> containing the current <see cref="Mvc.MvcOptions">MVC options</see>.</param> public ODataApiDescriptionProvider( IODataRouteCollectionProvider routeCollectionProvider, IInlineConstraintResolver inlineConstraintResolver, IModelMetadataProvider metadataProvider, DefaultQuerySettings defaultQuerySettings, IOptions <ODataApiExplorerOptions> options, IOptions <MvcOptions> mvcOptions) { Arg.NotNull(routeCollectionProvider, nameof(routeCollectionProvider)); Arg.NotNull(metadataProvider, nameof(metadataProvider)); Arg.NotNull(options, nameof(options)); Arg.NotNull(mvcOptions, nameof(mvcOptions)); RouteCollectionProvider = routeCollectionProvider; ModelTypeBuilder = new DefaultModelTypeBuilder(); ConstraintResolver = inlineConstraintResolver; MetadataProvider = metadataProvider; DefaultQuerySettings = defaultQuerySettings; this.options = options; MvcOptions = mvcOptions.Value; modelMetadata = new Lazy <ModelMetadata>(NewModelMetadata); }