Cache OnStarting callback delegate (#9283)
This commit is contained in:
parent
9173c5adeb
commit
84da613d2c
|
|
@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
|||
/// </summary>
|
||||
internal class SaveTempDataFilter : IResourceFilter, IResultFilter
|
||||
{
|
||||
private static readonly Func<object, Task> OnStartingCallback = (state) => OnStarting((HttpContext)state);
|
||||
// Internal for unit testing
|
||||
internal static readonly object SaveTempDataFilterContextKey = new object();
|
||||
|
||||
|
|
@ -43,11 +44,15 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
|||
|
||||
if (!context.HttpContext.Response.HasStarted)
|
||||
{
|
||||
context.HttpContext.Response.OnStarting((state) =>
|
||||
{
|
||||
var httpContext = (HttpContext)state;
|
||||
context.HttpContext.Response.OnStarting(
|
||||
callback: OnStartingCallback,
|
||||
state: context.HttpContext);
|
||||
}
|
||||
}
|
||||
|
||||
var saveTempDataContext = GetTempDataContext(context.HttpContext);
|
||||
private static Task OnStarting(HttpContext httpContext)
|
||||
{
|
||||
var saveTempDataContext = GetTempDataContext(httpContext);
|
||||
if (saveTempDataContext.RequestHasUnhandledException)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -70,9 +75,6 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Filters
|
|||
httpContext: httpContext);
|
||||
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
state: context.HttpContext);
|
||||
}
|
||||
}
|
||||
|
||||
/// <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;
|
||||
if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))
|
||||
|
|
|
|||
Loading…
Reference in New Issue