tag route parameter page net development data asp all asp.net asp.net-mvc caching culture multi-tenant

asp.net - route - environment tag helper



Caché de salida para aplicaciones de varios usuarios, que varía según el nombre de host y la cultura (1)

Tengo una aplicación multi-tenant en ASP.NET MVC. La instancia de la aplicación que se servirá es función del nombre de host solo (algo parecido a stackexchange, supongo).

Cada instancia de la aplicación puede tener una configuración cultural diferente (incluso "automática", para leer el idioma del navegador y tratar de usarla), y se localizará en consecuencia.

En esta situación, me gustaría hacer un almacenamiento en caché de salida en algunas de mis acciones. Entonces, mis preguntas son:

  1. ¿Cuáles son las posibilidades de lograr el almacenamiento en memoria caché de salida de una aplicación ASP.NET MVC multi-tenant, si la salida depende exclusivamente del nombre de host (es decir, ignorando el requisito de localización)?

  2. Lo mismo que (1), pero ahora considerando que la salida también depende de la configuración cultural .

  3. Igual que (2), pero considerando que la salida puede variar con los parámetros que se pasaron a la acción?

En este caso, considero que todos los sitios se ejecutan desde un único sitio web de IIS.


Acabo de descubrir cómo lograr esto.

Simplemente use la propiedad VaryByHeader , establecida en "host" . Hay muchas posibilidades para hacerlo.

Método 1

Utilice OutputCacheAttribute pasando todos los elementos de configuración necesarios, incluido VaryByHeader :

public class HomeController : Controller { [OutputCache(Duration = 3600, VaryByParam = "none", VaryByHeader = "host")] public ActionResult Index() { /* ... */ } }

Método 2

O puede configurarlo en un perfil en Web.config:

<?xml version="1.0"?> <configuration> <!-- ... --> <system.web> <!-- ... --> <caching> <outputCacheSettings> <outputCacheProfiles> <clear/> <add name="Multitenant" enabled="true" duration="3600" varyByHeader="host" varyByParam="none"/> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web> </configuration>

Entonces úsalo:

public class HomeController : Controller { [OutputCache(CacheProfile = "Multitenant")] public ActionResult Index() { /* ... */ } }

Método 3

O puede subclasificar el OutputCacheAttribute y usarlo:

public sealed class MultitenantOutputCacheAttribute : OutputCacheAttribute { public MultitenantOutputCacheAttribute() { VaryByHeader = "host"; VaryByParam = "none"; Duration = 3600; } }

Entonces úsalo:

public class HomeController : Controller { [MultitenantOutputCache] public ActionResult Index() { /* ... */ } }