Skip to content

Commit 5a14de6

Browse files
committed
resolve public api review comments
1 parent e7ac93e commit 5a14de6

28 files changed

Lines changed: 254 additions & 263 deletions

OData/src/System.Web.OData/Extensions/HttpConfigurationExtensions.cs

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static class HttpConfigurationExtensions
3535

3636
private const string TimeZoneInfoKey = "System.Web.OData.TimeZoneInfo";
3737

38-
private const string ResolverSettingsKey = "System.Web.OData.ResolverSettingsKey";
38+
private const string UrlKeyDelimiterKey = "System.Web.OData.UrlKeyDelimiterKey";
3939

4040
private const string ContinueOnErrorKey = "System.Web.OData.ContinueOnErrorKey";
4141

@@ -405,24 +405,7 @@ public static void SetUrlKeyDelimiter(this HttpConfiguration configuration, ODat
405405
throw Error.ArgumentNull("configuration");
406406
}
407407

408-
ODataUriResolverSettings settings = configuration.GetResolverSettings();
409-
settings.UrlKeyDelimiter = urlKeyDelimiter;
410-
}
411-
412-
/// <summary>
413-
/// Sets the Uri resolver for the Uri parser on the configuration.
414-
/// </summary>
415-
/// <param name="configuration">The server configuration.</param>
416-
/// <param name="uriResolver">The <see cref="ODataUriResolver"/></param>
417-
public static void SetUriResolver(this HttpConfiguration configuration, ODataUriResolver uriResolver)
418-
{
419-
if (configuration == null)
420-
{
421-
throw Error.ArgumentNull("configuration");
422-
}
423-
424-
ODataUriResolverSettings settings = configuration.GetResolverSettings();
425-
settings.UriResolver = uriResolver;
408+
configuration.Properties[UrlKeyDelimiterKey] = urlKeyDelimiter;
426409
}
427410

428411
/// <summary>
@@ -445,22 +428,21 @@ internal static bool HasEnabledNullDynamicProperty(this HttpConfiguration config
445428
return false;
446429
}
447430

448-
internal static ODataUriResolverSettings GetResolverSettings(this HttpConfiguration configuration)
431+
internal static ODataUrlKeyDelimiter GetUrlKeyDelimiter(this HttpConfiguration configuration)
449432
{
450433
if (configuration == null)
451434
{
452435
throw Error.ArgumentNull("configuration");
453436
}
454437

455438
object value;
456-
if (configuration.Properties.TryGetValue(ResolverSettingsKey, out value))
439+
if (configuration.Properties.TryGetValue(UrlKeyDelimiterKey, out value))
457440
{
458-
return value as ODataUriResolverSettings;
441+
return value as ODataUrlKeyDelimiter;
459442
}
460443

461-
ODataUriResolverSettings defaultSettings = new ODataUriResolverSettings();
462-
configuration.Properties[ResolverSettingsKey] = defaultSettings;
463-
return defaultSettings;
444+
configuration.Properties[UrlKeyDelimiterKey] = null;
445+
return null;
464446
}
465447

466448
/// <summary>
@@ -542,18 +524,12 @@ public static ODataRoute MapODataServiceRoute(this HttpConfiguration configurati
542524

543525
// 2) Resolve the path handler and set URI resolver to it.
544526
IODataPathHandler pathHandler = rootContainer.GetRequiredService<IODataPathHandler>();
545-
527+
546528
// if settings is not on local, use the global configuration settings.
547-
ODataUriResolverSettings settings = configuration.GetResolverSettings();
548-
IODataUriResolver pathResolver = pathHandler as IODataUriResolver;
549-
if (pathResolver != null && pathResolver.UriResolver == null)
550-
{
551-
pathResolver.UriResolver = settings.UriResolver;
552-
}
553-
554-
if (pathResolver != null && pathResolver.UrlKeyDelimiter == null)
529+
if (pathHandler != null && pathHandler.UrlKeyDelimiter == null)
555530
{
556-
pathResolver.UrlKeyDelimiter = settings.UrlKeyDelimiter;
531+
ODataUrlKeyDelimiter urlKeyDelimiter = configuration.GetUrlKeyDelimiter();
532+
pathHandler.UrlKeyDelimiter = urlKeyDelimiter;
557533
}
558534

559535
// 3) Resolve some required services and create the route constraint.

OData/src/System.Web.OData/OData/ODataUriResolverSettings.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

OData/src/System.Web.OData/OData/Query/ModelBoundQuerySettings.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public Dictionary<string, SelectExpandType> SelectConfigurations
172172
/// <summary>
173173
/// Copy the <see cref="ExpandConfiguration"/>s of navigation properties.
174174
/// </summary>
175-
public void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> expandConfigurations)
175+
internal void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> expandConfigurations)
176176
{
177177
_expandConfigurations.Clear();
178178
foreach (var expandConfiguration in expandConfigurations)
@@ -184,7 +184,7 @@ public void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> exp
184184
/// <summary>
185185
/// Copy the $orderby configuration of properties.
186186
/// </summary>
187-
public void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurations)
187+
internal void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurations)
188188
{
189189
_orderByConfigurations.Clear();
190190
foreach (var orderByConfiguration in orderByConfigurations)
@@ -196,7 +196,7 @@ public void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurat
196196
/// <summary>
197197
/// Copy the $select configuration of properties.
198198
/// </summary>
199-
public void CopySelectConfigurations(Dictionary<string, SelectExpandType> selectConfigurations)
199+
internal void CopySelectConfigurations(Dictionary<string, SelectExpandType> selectConfigurations)
200200
{
201201
_selectConfigurations.Clear();
202202
foreach (var selectConfiguration in selectConfigurations)
@@ -208,7 +208,7 @@ public void CopySelectConfigurations(Dictionary<string, SelectExpandType> select
208208
/// <summary>
209209
/// Copy the $filter configuration of properties.
210210
/// </summary>
211-
public void CopyFilterConfigurations(Dictionary<string, bool> filterConfigurations)
211+
internal void CopyFilterConfigurations(Dictionary<string, bool> filterConfigurations)
212212
{
213213
_filterConfigurations.Clear();
214214
foreach (var filterConfiguration in filterConfigurations)

OData/src/System.Web.OData/OData/Query/ODataQueryOptions.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.Web.OData.Formatter;
1515
using System.Web.OData.Properties;
1616
using System.Web.OData.Query.Validators;
17+
using Microsoft.Extensions.DependencyInjection;
1718
using Microsoft.OData;
1819
using Microsoft.OData.Edm;
1920
using Microsoft.OData.UriParser;
@@ -77,15 +78,7 @@ public ODataQueryOptions(ODataQueryContext context, HttpRequestMessage request)
7778
context.NavigationSource,
7879
queryParameters);
7980

80-
HttpConfiguration configuration = Request.GetConfiguration();
81-
if (configuration != null)
82-
{
83-
ODataUriResolverSettings resolverSettings = configuration.GetResolverSettings();
84-
if (resolverSettings.UriResolver != null)
85-
{
86-
_queryOptionParser.Resolver = resolverSettings.UriResolver;
87-
}
88-
}
81+
_queryOptionParser.Resolver = request.GetRequestContainer().GetRequiredService<ODataUriResolver>();
8982

9083
BuildQueryOptions(queryParameters);
9184

OData/src/System.Web.OData/OData/Routing/Conventions/AttributeRoutingConvention.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,12 @@ public AttributeRoutingConvention(string routeName, HttpConfiguration configurat
5656
throw Error.ArgumentNull("configuration");
5757
}
5858

59-
// if setting is not on local, use the global configuration setting.
60-
ODataUriResolverSettings settings = configuration.GetResolverSettings();
61-
IODataUriResolver pathResolver = pathTemplateHandler as IODataUriResolver;
62-
if (pathResolver != null && pathResolver.UriResolver == null)
59+
IODataPathHandler pathHandler = pathTemplateHandler as IODataPathHandler;
60+
// if settings is not on local, use the global configuration settings.
61+
if (pathHandler != null && pathHandler.UrlKeyDelimiter == null)
6362
{
64-
pathResolver.UriResolver = settings.UriResolver;
65-
}
66-
67-
if (pathResolver != null && pathResolver.UrlKeyDelimiter == null)
68-
{
69-
pathResolver.UrlKeyDelimiter = settings.UrlKeyDelimiter;
63+
ODataUrlKeyDelimiter urlKeyDelimiter = configuration.GetUrlKeyDelimiter();
64+
pathHandler.UrlKeyDelimiter = urlKeyDelimiter;
7065
}
7166

7267
Action<HttpConfiguration> oldInitializer = configuration.Initializer;

OData/src/System.Web.OData/OData/Routing/DefaultODataPathHandler.cs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,8 @@ namespace System.Web.OData.Routing
2121
/// <summary>
2222
/// Parses an OData path as an <see cref="ODataPath"/> into an OData link.
2323
/// </summary>
24-
public class DefaultODataPathHandler : IODataPathHandler, IODataPathTemplateHandler, IODataUriResolver
24+
public class DefaultODataPathHandler : IODataPathHandler, IODataPathTemplateHandler
2525
{
26-
/// <summary>
27-
/// Gets or sets the resolver for Uri parsing
28-
/// </summary>
29-
public ODataUriResolver UriResolver { get; set; }
30-
3126
/// <summary>
3227
/// Gets or Sets the <see cref="ODataUrlKeyDelimiter"/> to use while parsing, specifically
3328
/// whether to recognize keys as segments or not.
@@ -108,7 +103,6 @@ private ODataPath Parse(string serviceRoot, string odataPath, IServiceProvider r
108103
Uri fullUri = null;
109104
NameValueCollection queryString = null;
110105
IEdmModel model = requestContainer.GetRequiredService<IEdmModel>();
111-
112106
if (template)
113107
{
114108
uriParser = new ODataUriParser(model, new Uri(odataPath, UriKind.Relative), requestContainer);
@@ -128,11 +122,6 @@ private ODataPath Parse(string serviceRoot, string odataPath, IServiceProvider r
128122
uriParser = new ODataUriParser(model, serviceRootUri, fullUri, requestContainer);
129123
}
130124

131-
if (UriResolver != null)
132-
{
133-
uriParser.Resolver = UriResolver;
134-
}
135-
136125
if (UrlKeyDelimiter != null)
137126
{
138127
uriParser.UrlKeyDelimiter = UrlKeyDelimiter;

OData/src/System.Web.OData/OData/Routing/IODataPathHandler.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

44
using System.Diagnostics.CodeAnalysis;
5+
using Microsoft.OData;
56

67
namespace System.Web.OData.Routing
78
{
@@ -26,5 +27,11 @@ public interface IODataPathHandler
2627
/// <param name="path">The OData path to convert into a link.</param>
2728
/// <returns>The generated OData link.</returns>
2829
string Link(ODataPath path);
30+
31+
/// <summary>
32+
/// Gets or Sets the <see cref="ODataUrlKeyDelimiter"/> to use while parsing, specifically
33+
/// whether to recognize keys as segments or not.
34+
/// </summary>
35+
ODataUrlKeyDelimiter UrlKeyDelimiter { get; set; }
2936
}
3037
}

OData/src/System.Web.OData/OData/Routing/IODataUriResolver.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

OData/src/System.Web.OData/System.Web.OData.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@
149149
<Compile Include="OData\IEdmDeltaDeletedEntityObject.cs" />
150150
<Compile Include="OData\IEdmDeltaDeletedLink.cs" />
151151
<Compile Include="OData\IEdmDeltaLinkBase.cs" />
152-
<Compile Include="OData\ODataUriResolverSettings.cs" />
153152
<Compile Include="Extensions\UrlHelperExtensions.cs" />
154153
<Compile Include="OData\Batch\ODataBatchHandler.cs" />
155154
<Compile Include="OData\Batch\ODataBatchHttpRequestMessageExtensions.cs" />
@@ -294,7 +293,6 @@
294293
<Compile Include="OData\Routing\Conventions\NavigationSourceRoutingConvention.cs" />
295294
<Compile Include="OData\Routing\Conventions\SingletonRoutingConvention.cs" />
296295
<Compile Include="OData\Routing\DefaultODataPathHandler.cs" />
297-
<Compile Include="OData\Routing\IODataUriResolver.cs" />
298296
<Compile Include="OData\Routing\ODataParameterValue.cs" />
299297
<Compile Include="OData\Routing\DefaultODataPathValidator.cs" />
300298
<Compile Include="OData\Routing\ODataPathSegmentExtensions.cs" />

OData/test/E2ETest/WebStack.QA.Test.OData/AlternateKeys/AlternateKeysTest.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

4+
using System.Collections.Generic;
45
using System.Net;
56
using System.Net.Http;
67
using System.Net.Http.Headers;
@@ -10,6 +11,8 @@
1011
using System.Web.Http.Dispatcher;
1112
using System.Web.OData;
1213
using System.Web.OData.Extensions;
14+
using System.Web.OData.Routing.Conventions;
15+
using Microsoft.OData;
1316
using Microsoft.OData.Edm;
1417
using Microsoft.OData.UriParser;
1518
using Nuwa;
@@ -45,12 +48,17 @@ public static void UpdateConfiguration(HttpConfiguration configuration)
4548
configuration.Services.Replace(typeof (IAssembliesResolver), resolver);
4649

4750
IEdmModel model = AlternateKeysEdmModel.GetEdmModel();
48-
configuration.SetUriResolver(new AlternateKeysODataUriResolver(model));
4951

5052
configuration.Routes.Clear();
5153

5254
configuration.Count().Filter().OrderBy().Expand().MaxTop(null);
53-
configuration.MapODataServiceRoute("odata", "odata", model: model);
55+
56+
configuration.MapODataServiceRoute("odata", "odata",
57+
builder =>
58+
builder.AddService(ServiceLifetime.Singleton, sp => model)
59+
.AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
60+
ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", configuration))
61+
.AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new AlternateKeysODataUriResolver(model)));
5462

5563
configuration.EnsureInitialized();
5664
}

0 commit comments

Comments
 (0)