Torakami Ответов: 0

Как кэшировать ответ api на страницах MVC razor


Привет ,

Я пытаюсь cahce ответ с помощью cacheresponse в сети многоточия ядро 2.1. Я использую approacch страницы MVC бритвы.

Но проблема заключается в перерывах между переходами с одной страницы на другую. Когда я перенаправляю данные с одной страницы на другую, он не вызывает этот конкретный api, связанный со следующей страницей. и когда вы возвращаетесь на исходную страницу , Бутит непосредственно отображает данные json в браузере.

Что я уже пробовал:

это был мой файл statup.cs, в котором я включил cacheresponse

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Internal;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace evo_farm
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
            HostingEnvironment = HostingEnvironment;
        }

        public IConfiguration Configuration { get; }
        public IHostingEnvironment HostingEnvironment { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<IISOptions>(options =>
            {
                options.ForwardClientCertificate = false;
            });

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
         .AddCookie()
         .AddOpenIdConnect("Auth0", options =>
         {
             // Set the authority to your Auth0 domain
             options.Authority = $"https://{Configuration["Auth0:Domain"]}";

             // Configure the Auth0 Client ID and Client Secret
             options.ClientId = Configuration["Auth0:ClientId"];
             options.ClientSecret = Configuration["Auth0:ClientSecret"];

             // Set response type to code
             options.ResponseType = "code";

             // Configure the scope
             options.Scope.Clear();
             options.Scope.Add("openid");

             // Set the callback path, so Auth0 will call back to http://localhost:5000/signin-auth0 
             // Also ensure that you have added the URL as an Allowed Callback URL in your Auth0 dashboard 
             options.CallbackPath = new PathString("/signin-auth0");

             // Configure the Claims Issuer to be Auth0
             options.ClaimsIssuer = "Auth0";

             // Saves tokens to the AuthenticationProperties
             options.SaveTokens = true;

             options.Events = new OpenIdConnectEvents
             {
                 //  OnRemoteFailure = OnRemoteFailure,
                 // handle the logout redirection 
                 OnRedirectToIdentityProviderForSignOut = (context) =>
              {
                  var logoutUri = $"https://{Configuration["Auth0:Domain"]}/v2/logout?client_id={Configuration["Auth0:ClientId"]}";

                  var postLogoutUri = context.Properties.RedirectUri;
                  if (!string.IsNullOrEmpty(postLogoutUri))
                  {
                      if (postLogoutUri.StartsWith("/"))
                      {
                          // transform to absolute
                          var request = context.Request;
                          postLogoutUri = request.Scheme + "://" + request.Host + request.PathBase + postLogoutUri;
                      }
                      logoutUri += $"&returnTo={ Uri.EscapeDataString(postLogoutUri)}";
                  }

                  context.Response.Redirect(logoutUri);
                  context.HandleResponse();

                  return Task.CompletedTask;
              }
             };
         });


            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            // services.AddResponseCaching(options =>
            // {
            //     options.UseCaseSensitivePaths = true;
            // });
            
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddMvc().AddRazorPagesOptions(options =>
            {
                options.Conventions.AddPageRoute("/MainPage", "");
            });
            services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
        }

        private Task OnRemoteFailure(RemoteFailureContext context)
        {

            if (context.Failure.Message.Contains("Correlation failed"))
            {
                context.Response.Redirect("/MainPage"); // redirect without trailing slash
                context.HandleResponse();
            }
            return Task.CompletedTask;
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            // app.UseCookiePolicy(new CookiePolicyOptions()
            // {
            //     HttpOnly = HttpOnlyPolicy.Always,
            //     Secure = CookieSecurePolicy.Always,
            //     MinimumSameSitePolicy = SameSiteMode.Strict
            // });

            app.UseCorsMiddleware();
            app.UseAuthentication();
            app.UseCors("CorsPolicy");
            // app.UseResponseCaching();
    //         app.Use(async (context, next) =>
    // {
    //     // For GetTypedHeaders, add: using Microsoft.AspNetCore.Http;
    //     context.Response.GetTypedHeaders().CacheControl =
    //         new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
    //         {
    //             Public = true,
    //             MaxAge = TimeSpan.FromSeconds(120)
    //         };
    //         context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
    //         new string[] { "Accept-Encoding" };

    //     await next();
    // });
            app.UseMvc();
            //app.UseMvc(rb =>
            //{
            //    rb.MapRoute(
            //        name: "default",
            //        template: "{controller}/{action}/{id?}",
            //        defaults: new { controller = "Home", action = "Index" });
            //});
        }
    }
}

0 Ответов