Asp.net core response caching by country

455 Views Asked by At

I need to use use response caching for certain controller actions based on the country the request is coming from.

I have figured out how to get the country code from the request (it involves reading from a database, expensive, so I want to do this just for the actions that require a country), but I am not sure how to do the caching part.

I am thinking of writing a middleware (e.g., named CountryResolver)that will run before the response caching middleware and set the country SOMEHOW in the request and have the Response Cache middleware vary by country.

app.UseCountryResolver();
app.UseResponseCaching();

There are two main problems I am facing:

Problem 1-

I need that middleware not to run for every request, but only for some requests that are routed to country-specific actions. I am thinking of annotating such country-specific actions via a custom attribute (e.g., [CountryRequired]).

[CountryRequired]
[ResponseCache(VaryByQueryKeys = new string[] { "country"}]
public IActionResult MyAction()
{

However I don't know how the middleware can pickup the actions that have such annotation so it can decide whether to lookup the country or not.

Problem 2- "...set the country SOMEHOW in the request"

I was thinking of using VaryByQueryKeys and have the middleware set the country to a query string key named "country" BUT HttpContext.Request.Query collection is readonly. So I am not sure what other mechanism can I use for this.

Any help is very appreciated.

0

There are 0 best solutions below