Очистка кэша страницы в ASP.NET

Как указано в сообщении об ошибке, после того, как вы установили targetSdkVersion в 23, вы используете разрешения на выполнение во время выполнения Android 6.0 и не можете перейти к более раннему targetSdkVersion.

Как упоминалось в Выбор вашей записи компиляции, min и targetSdkVerison :

Это не значит, что вам нужно использовать каждую новую введенную функцию и не следует вы вслепую обновляете свою целевуюSDKVersion без тестирования - пожалуйста, пожалуйста тест перед обновлением targetSdkVersion! Ваши пользователи будут благодарны вам.

blockquote>

Вам нужно будет обновить совместимость вашего приложения с API 23, удалив библиотеки, которые специально запрещают использование таргетинга API 23, и убедитесь, что вы запрашиваете опасные разрешения во время выполнения .

50
задан Pure.Krome 31 May 2010 в 18:55
поделиться

6 ответов

Я нашел ответ, который я искал:

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
48
ответ дан GateKiller 7 November 2019 в 10:52
поделиться

Используя Ответ. AddCacheItemDependency для очистки всего outputcaches.

  public class Page : System.Web.UI.Page
  {
    protected override void OnLoad(EventArgs e)
    {
        try
        {
            string cacheKey = "cacheKey";
            object cache = HttpContext.Current.Cache[cacheKey];
            if (cache == null)
            {
              HttpContext.Current.Cache[cacheKey] = DateTime.UtcNow.ToString();
            }

            Response.AddCacheItemDependency(cacheKey);
        }
        catch (Exception ex)
        {
            throw new SystemException(ex.Message);
        }

        base.OnLoad(e);
    }     
 }



  // Clear All OutPutCache Method    

    public void ClearAllOutPutCache()
    {
        string cacheKey = "cacheKey";
        HttpContext.Cache.Remove(cacheKey);
    }

Это, также может использоваться в MVC's ASP.NET OutputCachedPage.

5
ответ дан 7 November 2019 в 10:52
поделиться

Хм. Можно определить атрибут VaryByCustom на объекте OutputCache. Значение этого передается в качестве параметра методу GetVaryByCustomString, который можно реализовать в global.asax. Значение, возвращенное этим методом, используется в качестве индекса в кэшируемые элементы - при возврате количества комментариев к странице, например, каждый раз, когда комментарий добавляется будет кэшироваться, новая страница.

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

, С другой стороны, Вы могли реализовать неизменяемые биты страницы (навигация, реклама, фактическая запись в блоге) как пользовательские элементы управления и реализовать частичную страницу, кэширующуюся на каждом из тех пользовательских элементов управления.

1
ответ дан John Christensen 7 November 2019 в 10:52
поделиться

Если Вы изменяетесь "*" на просто параметры, кэш должен варьироваться на (PostID?) можно сделать что-то вроде этого:

//add dependency
string key = "post.aspx?id=" + PostID.ToString();
Cache[key] = new object();
Response.AddCacheItemDependency(key);

и когда кто-то добавляет комментарий...

Cache.Remove(key);

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

1
ответ дан palmsey 7 November 2019 в 10:52
поделиться

почему бы не использовать sqlcachedependency on the posts table?

sqlcachedependency msdn

Таким образом, Вы не реализуете пользовательский код очистки кэша и просто обновляете кэш по мере изменения содержимого в db?

.
1
ответ дан 7 November 2019 в 10:52
поделиться

Вышесказанное хорошо, если вы знаете, для каких страниц вы хотите очистить кэш. В моем экземпляре (ASP.NET MVC) я ссылался на одни и те же данные со всего совмеще. Поэтому, когда я делал [сохранение], я хотел очистить кэш сайта по всему. Вот что сработало для меня: http://aspalliance.com/668

Это делается в контексте фильтра OnActionExecuting. Это можно так же легко сделать, переопределив OnActionExecuting в BaseController или что-то в этом роде.

HttpContextBase httpContext = filterContext.HttpContext;
httpContext.Response.AddCacheItemDependency("Pages");

Настройка:

protected void Application_Start()
{
    HttpRuntime.Cache.Insert("Pages", DateTime.Now);
}

Незначительная настройка: У меня есть помощник, который добавляет "flash сообщения" (сообщения об ошибках, сообщения об успехах - "Этот элемент был успешно сохранен" и т.д.). Чтобы флэш-сообщение не появлялось на каждом последующем GET, мне пришлось признать недействительным после написания флэш-сообщения.

Очистка кэша:

HttpRuntime.Cache.Insert("Pages", DateTime.Now);

Надеюсь, это поможет.

40
ответ дан 7 November 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: