dxa-web-application-dotnet
dxa-web-application-dotnet copied to clipboard
Outputcache empty content after redirect
If you do a redirect from your Page controller (use case described at the end), the DxaOutputCache action filters still continue executing. By the time the OnResultExecuting and OnResultExceuted are reached, the result is an empty string and the Page is cached in such a way. The Page's output caching would have been disabled by a dynamic child Entity, however it's never rendered (thus it does not disable the top level output cache) because of the Redirect on the Page level. The Page model is shared across static pages as well, so decorating it with DxaNoOutputCache is not viable.
Use case: if you control the Page's readability by its Metadata (you need to be within the Action to have the Page model to view the Metadata) and compare it
The only mechanisms to influence the caching from outside of the filters are no good:
- setting the
Controller.ViewData[DxaViewDataItems.DisableOutputCache]
in the controller's action is already too late, this check is only present inOnActionExecuting
which is already finished by this point and the cache key is already pushed - setting the model's Volatile property to true is also no good, as this is checked for child actions only
if (ctx.IsChildAction) {if (model != null && (IgnoreCaching(model) || model.IsVolatile)) { SetDisablePageOutputCache(ctx, true);
Fixed and created a pull request https://github.com/RWS/dxa-web-application-dotnet/pull/95