在ASP.NET中,是否可以通过主机名输出缓存?即,varbyhost 或varbyhostheader?

发布于 2024-08-31 16:16:07 字数 587 浏览 6 评论 0原文

我有一个包含许多主机标头的网站。主题和数据取决于主机标头,不同的主机加载不同的外观站点。

假设我有一个名为“Foo”的网站,它返回搜索结果。相同的代码运行下面列出的两个站点。它是相同的服务器和网站(使用主机标头)

  1. www.foo.com
  2. www.foo.com.au

现在,如果我去到 .com,该网站的主题为蓝色。如果我访问 .com.au 网站,它的主题为红色。

根据主机名的不同,同一搜索结果的数据也不同:.com 在美国的结果和 .com.au 在澳大利亚的结果。

如果我希望使用OutputCaching,可以通过主机名进行处理和分区吗?

我担心一个人访问 .com 网站(正确返回美国结果)后,另一个人访问 .com.au 网站并搜索相同的数据将获取 .com 网站的主题和结果。

可以缓存吗?

I've got a website that has a number of host headers. The theme and data depend on the host header, and different hosts load different looking sites.

So let's imagine I have a website called "Foo" that returns search results. The same code runs both sites listed below. It is the same server and website (using Host Headers)

  1. www.foo.com
  2. www.foo.com.au

Now, if I go to .com, the site is themed in blue. If I go to the .com.au site, it's themed in red.

And the data is different for the same search result, based on the host name: US results for .com and Australian results for .com.au.

If I wish to use OutputCaching, can this be handled and partitioned by the host name?

I'm concern that after a person goes to the .com site, (correctly returning US results) that a second person visiting the .com.au site and searching for the same data will get the theme and results for the .com site.

Is caching possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情徒 2024-09-07 16:16:07

是的,您可以“因习惯而异”。我使用相同的:

将以下内容放入您的 Global.asax.cs 中:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "Host")
    {
        return context.Request.Url.Host;
    }
    return String.Empty;
}

然后放入您的控制器中:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
    return View();
}

Yes, you can "vary by custom". I am using the same:

Place the following in your Global.asax.cs:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "Host")
    {
        return context.Request.Url.Host;
    }
    return String.Empty;
}

Then in your controller:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
    return View();
}
债姬 2024-09-07 16:16:07

查看 OutputCache 指令的 VaryByCustom 参数。

要定义调用 VaryByCustom 时发生的情况,您需要重写方法 GetVaryByCustomString:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if(custom == "Your_Custom_Value")
    {
        // Do some validation.
        // Return a string for say, .com, or .com.au

    }
    return String.Empty;
}

关键是为要缓存的每个实例返回一个字符串值。在您的情况下,您的重写方法需要从 URL 中删除“.com”或“.com.au”部分并返回它。每个不同的值都会产生不同的缓存。

华泰

Check out the VaryByCustom parameter of the OutputCache directive.

To define what happens when VaryByCustom is called, you need to override the method GetVaryByCustomString:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if(custom == "Your_Custom_Value")
    {
        // Do some validation.
        // Return a string for say, .com, or .com.au

    }
    return String.Empty;
}

The key is to return a string value for each instance you want to cache. In your case, your overrided method would need to strip the ".com" or ".com.au" part from the URL and return it. Each different value produces a different cache.

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文