Как кэшировать ответ 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" }); //}); } } }