Cache OnStarting callback delegate (#9283)

This commit is contained in:
Ben Adams 2019-04-12 00:08:58 +01:00 committed by David Fowler
parent 9173c5adeb
commit 84da613d2c
1 changed files with 32 additions and 30 deletions

View File

@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
/// </summary> /// </summary>
internal class SaveTempDataFilter : IResourceFilter, IResultFilter internal class SaveTempDataFilter : IResourceFilter, IResultFilter
{ {
private static readonly Func<object, Task> OnStartingCallback = (state) => OnStarting((HttpContext)state);
// Internal for unit testing // Internal for unit testing
internal static readonly object SaveTempDataFilterContextKey = new object(); internal static readonly object SaveTempDataFilterContextKey = new object();
@ -43,11 +44,15 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
if (!context.HttpContext.Response.HasStarted) if (!context.HttpContext.Response.HasStarted)
{ {
context.HttpContext.Response.OnStarting((state) => context.HttpContext.Response.OnStarting(
{ callback: OnStartingCallback,
var httpContext = (HttpContext)state; state: context.HttpContext);
}
}
var saveTempDataContext = GetTempDataContext(context.HttpContext); private static Task OnStarting(HttpContext httpContext)
{
var saveTempDataContext = GetTempDataContext(httpContext);
if (saveTempDataContext.RequestHasUnhandledException) if (saveTempDataContext.RequestHasUnhandledException)
{ {
return Task.CompletedTask; return Task.CompletedTask;
@ -70,9 +75,6 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
httpContext: httpContext); httpContext: httpContext);
return Task.CompletedTask; return Task.CompletedTask;
},
state: context.HttpContext);
}
} }
/// <inheritdoc /> /// <inheritdoc />
@ -115,7 +117,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
} }
} }
private SaveTempDataContext GetTempDataContext(HttpContext httpContext) private static SaveTempDataContext GetTempDataContext(HttpContext httpContext)
{ {
SaveTempDataContext saveTempDataContext = null; SaveTempDataContext saveTempDataContext = null;
if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value)) if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))