Перезапись URL + выходной кэш - PullRequest
3 голосов
/ 31 марта 2011

У меня проблема с использованием outputcache вместе с urlrewriting. У нас есть приложение, которое переписывает URL (IE http://localhost/about/) в "~ / page.aspx". На основании URL (/ about /) мы выясняем, какой контент показывать.

Теперь мы пытаемся добавить кэш вывода на эту страницу:

< %@ outputcache duration="600" location="Server" varybyparam="Custom" varybycustom="RawURL" %>

И в Global.asax мы переопределяем GetVaryByCustomString, как показано ниже:

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

Однако, когда мы публикуем страницу, я хотел бы сделать кэш недействительным, чтобы редакторы увидели изменение напрямую. Но независимо от того, что я пытаюсь, я не могу сделать недействительным кеш. Если я хочу сделать недействительным "/ about /", я хотел бы сделать это:

HttpResponse.RemoveOutputCacheItem("/about/");

К сожалению, это не работает. Единственное, что, кажется, работает:

HttpResponse.RemoveOutputCacheItem("/page.aspx");

Это очищает кеш для всех моих страниц, а не только "/about/".

Есть ли способ аннулировать кэш на основе URL? Или мы должны предоставить ключ кэша или что-то на страницу, чтобы иметь возможность программно аннулировать кэш?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 22 декабря 2014

Я решил использовать следующую ссылку.http://www.superstarcoders.com/blogs/posts/making-asp-net-output-cache-work-with-post-back.aspx

В основном на моем пользовательском контроле;

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (Request.QueryString["url"] == null)
            return;
        string url = "www." + Request.QueryString["url"].ToString().Replace("http://", "").Replace("https://", "").Replace("www.", "").ToLower();


        Response.AddCacheItemDependency(url);
    }
0 голосов
/ 31 марта 2011

Вам не нужно аннулировать кэш. Вы можете указать серверу не использовать кеш для определенных запросов.

Чтобы сделать это на своей странице, загрузите это

Response.Cache.AddValidationCallback((ValidateCache), Session);

Затем добавьте этот метод, чтобы сообщить приложению, использовать ли содержимое текущего кэша для текущего запроса

    public static void ValidateCache(HttpContext context, Object data, ref HttpValidationStatus status)
    {

        bool isEditor = /*assignment here*/;
        if (!isEditor)
        {
            status = HttpValidationStatus.Valid;
        }
        else
        {
            status = HttpValidationStatus.IgnoreThisRequest;
        }
    }

Если вы не хотите, чтобы другие пользователи могли видеть определенный запрос, используйте следующую команду:

 Response.Cache.SetCacheability(HttpCacheability.NoCache);
...