Веб-сайт Asp.net Core 2.0, контроль кеша работает не так, как ожидалось - PullRequest
0 голосов
/ 06 февраля 2019

В моем приложении asp.net core 2.0 я пытаюсь добавить заголовок срока действия (cache-control) в заголовок ответа для всех статических ресурсов, но он не добавляет его все.Ниже мой код

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddMvc().AddJsonOptions(jsonOptions =>
    {
        jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        // handle loops correctly
        jsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    });
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
    // services.AddResponseCaching();
    services.AddSingleton<Microsoft.Extensions.Configuration.IConfiguration>(Configuration);
    services.AddSingleton<Microsoft.Extensions.Configuration.IConfiguration>(Configuration);
    services.AddSingleton<IMapper>(sp => AutoMapperConfiguration.CreateMapper());

    var builder = new ContainerBuilder();
    builder.Populate(services);
    ApiFactory.RegisterDependencies(builder);
    this.ApplicationContainer = builder.Build();
    return new AutofacServiceProvider(this.ApplicationContainer);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var options = new RewriteOptions()
                       .AddRedirect("rent/(.*)", "/$1")
                       .AddRedirect("explore/(.*)", "/$1"); 
    app.UseRewriter(options);
    app.UseMyMiddleware();

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    app.UseCookiePolicy();       

    app.UseMvc(routes =>
    {
        routes
            .MapRoute(
            name: "goto_sitemap",
            template: "sitemap.xml",
            defaults: new { controller = "Home", action = "Sitemap" });
        routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
    });
}

Редактировать: я удалил пользовательский заголовок и добавил в промежуточное ПО

public static class BuilderExtensions
{
    public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder app)
    {
        return app.UseMiddleware<MyMiddleware>();
    }
}

public class MyMiddleware
{
    RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {

        if (context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            await _next(context);
        }
        else
        {
            Regex rx = new Regex(@"\b(?:https?:\/\/)?[^\/:]+\/.*?\/explore|\/rent|\/about|\/blog|\/partners|\/partner|\/property|\/partnerListing|\/areaguide|\/rentalinquiry|\/termcondition|\/sitemap|\/privacypolicy|\/advertise|\/expired|\/contactus|favicon|\/images|\/api|\/fonts|\/templates|\/css|\/lib|\/js|\/sitemap.xml|\/ror.xml|\/sitemap_mobile.xml",
            RegexOptions.Compiled | RegexOptions.IgnoreCase);
            if (context.Request.Path.Value == "/")
            {
                await _next(context);

            }
            else if (rx.IsMatch(context.Request.Path.Value))
            {
                await _next(context);
                if (context.Request.Path.Value.EndsWith(".css") || context.Request.Path.Value.EndsWith(".js")
                        || context.Request.Path.Value.EndsWith(".jpg") || context.Request.Path.Value.EndsWith(".jpeg")
                        || context.Request.Path.Value.EndsWith(".gif") || context.Request.Path.Value.EndsWith(".png"))
                {

                    //Set css and js files to be cached for 7 days
                    TimeSpan maxAge = new TimeSpan(7, 0, 0, 0);     //7 days
                    context.Response.Headers.Append("Cache-Control", "public,max-age=" + maxAge.TotalSeconds.ToString("0"));

                }
            }
            else
            {
                string path = "/explore" + context.Request.Path.Value;
                context.Request.Path = new PathString(path);
                await _next(context);
            }
        }
    }
}

Он не работал, поэтому я добавил то же самое в файл web.config, которыйтакже не работает.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="2.00:00:00" cacheControlCustom="public" />
  </staticContent>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\xxxx.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
        <environmentVariables> 
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> 
        </environmentVariables>
    </aspNetCore>
    <httpCompression>
        <dynamicTypes>
            <remove mimeType="text/event-stream" />
            <remove mimeType="*/*" />
            <add mimeType="*/*" enabled="true" />
            <add mimeType="text/event-stream" enabled="true" />
            <add mimeType="image/jpeg" enabled="false" />
            <add mimeType="font/woff2" enabled="false" />
            <add mimeType="image/png" enabled="false" />
            <add mimeType="image/gif" enabled="false" />
        </dynamicTypes>
        <staticTypes>
            <remove mimeType="image/svg+xml" />
            <add mimeType="image/jpeg" enabled="false" />
            <add mimeType="image/svg+xml" enabled="false" />
            <add mimeType="font/woff2" enabled="false" />
            <add mimeType="image/png" enabled="false" />
            <add mimeType="image/gif" enabled="false" />
        </staticTypes>
    </httpCompression>
  </system.webServer>
</configuration>

enter image description here

перестал работать 2 раза (проверка с полным обновлением)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...