Кнопка возврата браузера не выполняет метод контроллера - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю в ядре asp.net.Я столкнулся с проблемой, которая заключается в том, что когда я возвращаюсь на последнюю посещенную веб-страницу с помощью кнопки «Назад» браузера, метод действия моего контроллера не выполняется.

Когда мы нажимаем кнопку «Назад», браузер извлекает данные изкэш.Итак, если мы хотим выполнить метод действия контроллера, нам нужно запретить браузеру кэшировать эту страницу.

Я много гуглял по этому поводу.Благодаря этому я нашел много решений на основе кеша в ASP.NET MVC.Мол, отключить кеш.

Я проверил этот сайт и попробовал также.https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response?view=aspnetcore-2.2.Это не работает.

Мы выполняем некоторые действия на основе файлов cookie.Таким образом, отключение кэша не должно очищать это также.

Есть ли в ASP.NET Core какой-либо другой способ выполнить метод действия контроллера при нажатии кнопки возврата браузера?

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

1 Ответ

0 голосов
/ 21 декабря 2018

Вы должны быть осторожны при использовании no-cache.Для Caching это играет роль импорта в производительности.

Если вы хотите установить конкретное действие контроллера с помощью no-cache, вы можете выполнить следующие действия:

  1. настроить CacheProfiles в Startup.cs

    services.AddMvc(options =>
    {
        options.CacheProfiles.Add("Never",
            new CacheProfile()
            {
                Location = ResponseCacheLocation.None,
                NoStore = true
            });
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
  2. Использование

    [ResponseCache(CacheProfileName = "Never")]
    public IActionResult Index()
    {
        return View();
    }    
    

Если вы настаиваете на отсутствии кэша для всех запросов, попробуйте промежуточное ПО.

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Use(async (context, next) =>
        {
            context.Response.OnStarting(() =>
            {
                if (context.Response.Headers.ContainsKey("Cache-Control"))
                {
                    context.Response.Headers["Cache-Control"] = "no-cache,no-store";
                }
                else
                {
                    context.Response.Headers.Add("Cache-Control", "no-cache,no-store");
                }
                if (context.Response.Headers.ContainsKey("Pragma"))
                {
                    context.Response.Headers["Pragma"] = "no-cache";
                }
                else
                {
                    context.Response.Headers.Add("Pragma", "no-cache");
                }
                return Task.FromResult(0);
            });
            await next.Invoke();
        });
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...