Skip to content

Commit 4f9de9b

Browse files
Minor optimization in IUrlFactory. Related to #720
1 parent 52131a3 commit 4f9de9b

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/Microsoft.AspNetCore.Mvc.Versioning/Routing/ApiVersionLinkGenerator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace Microsoft.AspNetCore.Mvc.Routing
22
{
33
using Microsoft.AspNetCore.Http;
4-
using Microsoft.AspNetCore.Mvc.Versioning;
54
using Microsoft.AspNetCore.Routing;
65
using System;
76

src/Microsoft.AspNetCore.Mvc.Versioning/Routing/ApiVersionUrlHelperFactory.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,23 @@ public virtual IUrlHelper GetUrlHelper( ActionContext context )
2828
throw new ArgumentNullException( nameof( context ) );
2929
}
3030

31-
var urlHelper = new ApiVersionUrlHelper( context, Factory.GetUrlHelper( context ) );
31+
var items = context.HttpContext.Items;
3232

3333
// REF: https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.Core/src/Routing/UrlHelperFactory.cs#L44
34-
context.HttpContext.Items[typeof( IUrlHelper )] = urlHelper;
34+
if ( !items.TryGetValue( typeof( IUrlHelper ), out var value ) )
35+
{
36+
var urlHelper = new ApiVersionUrlHelper( context, Factory.GetUrlHelper( context ) );
37+
items[typeof( IUrlHelper )] = urlHelper;
38+
return urlHelper;
39+
}
40+
41+
if ( value is not ApiVersionUrlHelper outer )
42+
{
43+
var inner = value as IUrlHelper ?? Factory.GetUrlHelper( context );
44+
items[typeof( IUrlHelper )] = outer = new ApiVersionUrlHelper( context, inner );
45+
}
3546

36-
return urlHelper;
47+
return outer;
3748
}
3849
}
3950
}

0 commit comments

Comments
 (0)