Example #1
0
        private static SaveTempDataContext GetTempDataContext(HttpContext httpContext)
        {
            SaveTempDataContext saveTempDataContext = null;

            if (httpContext.Items.TryGetValue(SaveTempDataFilterContextKey, out var value))
            {
                saveTempDataContext = (SaveTempDataContext)value;
            }
            return(saveTempDataContext);
        }
Example #2
0
        /// <inheritdoc />
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            if (!context.HttpContext.Items.ContainsKey(SaveTempDataFilterContextKey))
            {
                var tempDataContext = new SaveTempDataContext()
                {
                    Filters = context.Filters,
                    TempDataDictionaryFactory = _factory
                };
                context.HttpContext.Items.Add(SaveTempDataFilterContextKey, tempDataContext);
            }

            if (!context.HttpContext.Response.HasStarted)
            {
                context.HttpContext.Response.OnStarting((state) =>
                {
                    var httpContext = (HttpContext)state;

                    var saveTempDataContext = GetTempDataContext(context.HttpContext);
                    if (saveTempDataContext.RequestHasUnhandledException)
                    {
                        return(Task.CompletedTask);
                    }

                    // If temp data was already saved, skip trying to save again as the calls here would potentially fail
                    // because the session feature might not be available at this point.
                    // Example: An action returns NoContentResult and since NoContentResult does not write anything to
                    // the body of the response, this delegate would get executed way late in the pipeline at which point
                    // the session feature would have been removed.
                    if (saveTempDataContext.TempDataSaved)
                    {
                        return(Task.CompletedTask);
                    }

                    SaveTempData(
                        result: null,
                        factory: saveTempDataContext.TempDataDictionaryFactory,
                        filters: saveTempDataContext.Filters,
                        httpContext: httpContext);

                    return(Task.CompletedTask);
                },
                                                        state: context.HttpContext);
            }
        }
Example #3
0
        /// <inheritdoc />
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            if (!context.HttpContext.Items.ContainsKey(SaveTempDataFilterContextKey))
            {
                var tempDataContext = new SaveTempDataContext()
                {
                    Filters = context.Filters,
                    TempDataDictionaryFactory = _factory
                };
                context.HttpContext.Items.Add(SaveTempDataFilterContextKey, tempDataContext);
            }

            if (!context.HttpContext.Response.HasStarted)
            {
                context.HttpContext.Response.OnStarting(
                    callback: OnStartingCallback,
                    state: context.HttpContext);
            }
        }