我在ASP.NET MVC中有一个多租户应用程序。将要提供的应用程序实例仅仅是主机名的功能(我认为这与stackexchange一致)。
应用程序的每个实例可能具有不同的文化设置(甚至“自动”,以阅读浏览器的语言并尝试使用它),并将相应地进行本地化。
在这种情况下,我想对我的一些操作进行一些输出缓存。所以,我的问题是:
>如果输出完全取决于主机名(即忽略本地化要求),那么实现多租户ASP.NET MVC应用程序的输出缓存有哪些可能性?
>与(1)相同,但现在考虑输出还取决于培养设置?
>与(2)相同,但考虑到输出可能会随传递给动作的参数而变化?
解决方法
我刚刚想出如何实现这一目标。
只需使用varyByHeader属性,设置为“host”即可。这样做有很多种可能性。
方法1
使用OutputCacheAttribute传递所有需要的配置元素,包括varyByHeader:
public class HomeController : Controller { [OutputCache(Duration = 3600,varyByParam = "none",varyByHeader = "host")] public ActionResult Index() { /* ... */ } }
方法2。
<?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>
然后使用它:
public class HomeController : Controller { [OutputCache(CacheProfile = "Multitenant")] public ActionResult Index() { /* ... */ } }
方法3。
或者您可以继承OutputCacheAttribute并使用它:
public sealed class MultitenantOutputCacheAttribute : OutputCacheAttribute { public MultitenantOutputCacheAttribute() { varyByHeader = "host"; varyByParam = "none"; Duration = 3600; } }
然后使用它:
public class HomeController : Controller { [MultitenantOutputCache] public ActionResult Index() { /* ... */ } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。