How to set Cache-Headers via Middleware before Mvc and not be overriden by ResponseCacheAttribute?











up vote
0
down vote

favorite












I have an ASP.NET Core 2.2 (preview3) project with several controllers decorated with ResponseCacheAttribute like this one:
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 60)]



Now I want to add a Middleware which is supposed to run before MVC and before Caching which might determine to not allow any clientside/proxy caching for this response.



But if I set context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; in the Middleware it gets overwritten by the ResponseCacheAttribute of the controllers later in the pipeline.



So my pipeline looks like this:




  • Use new Middleware: checks for cachability, sets no-store under specific conditions

  • UseResponseCaching

  • UseMvc


How can I get this to work?










share|improve this question


















  • 1




    Have you tried writing the header after the call to await next() in your middleware?
    – juunas
    Nov 20 at 11:09










  • Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
    – thomaswr
    Nov 20 at 12:08






  • 1




    Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
    – juunas
    Nov 20 at 12:10










  • Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
    – thomaswr
    Nov 20 at 12:22






  • 1




    HttpResponse.OnStarting ?
    – Tseng
    Nov 20 at 12:27















up vote
0
down vote

favorite












I have an ASP.NET Core 2.2 (preview3) project with several controllers decorated with ResponseCacheAttribute like this one:
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 60)]



Now I want to add a Middleware which is supposed to run before MVC and before Caching which might determine to not allow any clientside/proxy caching for this response.



But if I set context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; in the Middleware it gets overwritten by the ResponseCacheAttribute of the controllers later in the pipeline.



So my pipeline looks like this:




  • Use new Middleware: checks for cachability, sets no-store under specific conditions

  • UseResponseCaching

  • UseMvc


How can I get this to work?










share|improve this question


















  • 1




    Have you tried writing the header after the call to await next() in your middleware?
    – juunas
    Nov 20 at 11:09










  • Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
    – thomaswr
    Nov 20 at 12:08






  • 1




    Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
    – juunas
    Nov 20 at 12:10










  • Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
    – thomaswr
    Nov 20 at 12:22






  • 1




    HttpResponse.OnStarting ?
    – Tseng
    Nov 20 at 12:27













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have an ASP.NET Core 2.2 (preview3) project with several controllers decorated with ResponseCacheAttribute like this one:
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 60)]



Now I want to add a Middleware which is supposed to run before MVC and before Caching which might determine to not allow any clientside/proxy caching for this response.



But if I set context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; in the Middleware it gets overwritten by the ResponseCacheAttribute of the controllers later in the pipeline.



So my pipeline looks like this:




  • Use new Middleware: checks for cachability, sets no-store under specific conditions

  • UseResponseCaching

  • UseMvc


How can I get this to work?










share|improve this question













I have an ASP.NET Core 2.2 (preview3) project with several controllers decorated with ResponseCacheAttribute like this one:
[ResponseCache(Location = ResponseCacheLocation.Any, Duration = 60)]



Now I want to add a Middleware which is supposed to run before MVC and before Caching which might determine to not allow any clientside/proxy caching for this response.



But if I set context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; in the Middleware it gets overwritten by the ResponseCacheAttribute of the controllers later in the pipeline.



So my pipeline looks like this:




  • Use new Middleware: checks for cachability, sets no-store under specific conditions

  • UseResponseCaching

  • UseMvc


How can I get this to work?







caching asp.net-core asp.net-core-mvc






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 at 11:08









thomaswr

3811516




3811516








  • 1




    Have you tried writing the header after the call to await next() in your middleware?
    – juunas
    Nov 20 at 11:09










  • Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
    – thomaswr
    Nov 20 at 12:08






  • 1




    Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
    – juunas
    Nov 20 at 12:10










  • Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
    – thomaswr
    Nov 20 at 12:22






  • 1




    HttpResponse.OnStarting ?
    – Tseng
    Nov 20 at 12:27














  • 1




    Have you tried writing the header after the call to await next() in your middleware?
    – juunas
    Nov 20 at 11:09










  • Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
    – thomaswr
    Nov 20 at 12:08






  • 1




    Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
    – juunas
    Nov 20 at 12:10










  • Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
    – thomaswr
    Nov 20 at 12:22






  • 1




    HttpResponse.OnStarting ?
    – Tseng
    Nov 20 at 12:27








1




1




Have you tried writing the header after the call to await next() in your middleware?
– juunas
Nov 20 at 11:09




Have you tried writing the header after the call to await next() in your middleware?
– juunas
Nov 20 at 11:09












Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
– thomaswr
Nov 20 at 12:08




Thanks. I tried that. But Response has started and can't be modified at this state according to the Docs (docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware), it throws an exception.
– thomaswr
Nov 20 at 12:08




1




1




Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
– juunas
Nov 20 at 12:10




Right, hmm.. There might be some feature in the HttpContext's Features collection that allows you to disable the MVC caching feature.. Not sure though
– juunas
Nov 20 at 12:10












Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
– thomaswr
Nov 20 at 12:22




Yes, there is the IResponseCachingFeature, but then I have to register my middleware after ResponseCaching, otherwise it's not present. And I can't find any API to remove a feature...
– thomaswr
Nov 20 at 12:22




1




1




HttpResponse.OnStarting ?
– Tseng
Nov 20 at 12:27




HttpResponse.OnStarting ?
– Tseng
Nov 20 at 12:27

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391677%2fhow-to-set-cache-headers-via-middleware-before-mvc-and-not-be-overriden-by-respo%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391677%2fhow-to-set-cache-headers-via-middleware-before-mvc-and-not-be-overriden-by-respo%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

404 Error Contact Form 7 ajax form submitting

How to know if a Active Directory user can login interactively

Refactoring coordinates for Minecraft Pi buildings written in Python