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; }