From 00dbdd70dc9e562bc50cb3dec57f4d1e58d32e1d Mon Sep 17 00:00:00 2001 From: Stephen Just Date: Fri, 8 May 2020 10:35:54 -0600 Subject: [PATCH] Expose the value of odata.maxpagesize on ODataQueryOptions --- .../Query/ODataQueryOptions.cs | 22 ++++++++++++++++--- .../Microsoft.AspNet.OData.PublicApi.bsl | 1 + .../Microsoft.AspNetCore.OData.PublicApi.bsl | 1 + ...Microsoft.AspNetCore3x.OData.PublicApi.bsl | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.AspNet.OData.Shared/Query/ODataQueryOptions.cs b/src/Microsoft.AspNet.OData.Shared/Query/ODataQueryOptions.cs index 13da5b7cfb..2353b68a13 100644 --- a/src/Microsoft.AspNet.OData.Shared/Query/ODataQueryOptions.cs +++ b/src/Microsoft.AspNet.OData.Shared/Query/ODataQueryOptions.cs @@ -268,6 +268,22 @@ public bool IsSupportedQueryOption(string queryOptionName) return IsSystemQueryOption(lowcaseQueryOptionName, this._enableNoDollarSignQueryOptions); } + /// + /// Gets the maxpagesize from the request Prefer header. + /// + public int? RequestPrefersMaxPageSize + { + get + { + if (RequestPreferenceHelpers.RequestPrefersMaxPageSize(InternalRequest.Headers, out int pageSize)) + { + return pageSize; + } + + return null; + } + } + /// /// Apply the individual query to the given IQueryable in the right order. /// @@ -428,10 +444,10 @@ internal IQueryable ApplyPaging(IQueryable result, ODataQuerySettings querySetti pageSize = querySettings.ModelBoundPageSize.Value; } - int preferredPageSize = -1; - if (RequestPreferenceHelpers.RequestPrefersMaxPageSize(InternalRequest.Headers, out preferredPageSize)) + int? preferredPageSize = RequestPrefersMaxPageSize; + if (preferredPageSize.HasValue) { - pageSize = Math.Min(pageSize, preferredPageSize); + pageSize = Math.Min(pageSize, preferredPageSize.Value); } if (pageSize > 0) diff --git a/test/UnitTest/Microsoft.AspNet.OData.Test/PublicApi/Microsoft.AspNet.OData.PublicApi.bsl b/test/UnitTest/Microsoft.AspNet.OData.Test/PublicApi/Microsoft.AspNet.OData.PublicApi.bsl index ef8e9a3890..89dc63940d 100644 --- a/test/UnitTest/Microsoft.AspNet.OData.Test/PublicApi/Microsoft.AspNet.OData.PublicApi.bsl +++ b/test/UnitTest/Microsoft.AspNet.OData.Test/PublicApi/Microsoft.AspNet.OData.PublicApi.bsl @@ -2454,6 +2454,7 @@ public class Microsoft.AspNet.OData.Query.ODataQueryOptions { OrderByQueryOption OrderBy { public get; } ODataRawQueryOptions RawValues { public get; } System.Net.Http.HttpRequestMessage Request { public get; } + System.Nullable`1[[System.Int32]] RequestPrefersMaxPageSize { public get; } SelectExpandQueryOption SelectExpand { public get; } SkipQueryOption Skip { public get; } SkipTokenQueryOption SkipToken { public get; } diff --git a/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore.OData.PublicApi.bsl b/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore.OData.PublicApi.bsl index 82c87bfecd..6ea2b7951c 100644 --- a/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore.OData.PublicApi.bsl +++ b/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore.OData.PublicApi.bsl @@ -2609,6 +2609,7 @@ public class Microsoft.AspNet.OData.Query.ODataQueryOptions { OrderByQueryOption OrderBy { public get; } ODataRawQueryOptions RawValues { public get; } Microsoft.AspNetCore.Http.HttpRequest Request { public get; } + System.Nullable`1[[System.Int32]] RequestPrefersMaxPageSize { public get; } SelectExpandQueryOption SelectExpand { public get; } SkipQueryOption Skip { public get; } SkipTokenQueryOption SkipToken { public get; } diff --git a/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore3x.OData.PublicApi.bsl b/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore3x.OData.PublicApi.bsl index eaa74317bf..3621979dd2 100644 --- a/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore3x.OData.PublicApi.bsl +++ b/test/UnitTest/Microsoft.AspNetCore.OData.Test/PublicApi/Microsoft.AspNetCore3x.OData.PublicApi.bsl @@ -2780,6 +2780,7 @@ public class Microsoft.AspNet.OData.Query.ODataQueryOptions { OrderByQueryOption OrderBy { public get; } ODataRawQueryOptions RawValues { public get; } Microsoft.AspNetCore.Http.HttpRequest Request { public get; } + System.Nullable`1[[System.Int32]] RequestPrefersMaxPageSize { public get; } SelectExpandQueryOption SelectExpand { public get; } SkipQueryOption Skip { public get; } SkipTokenQueryOption SkipToken { public get; }