将缓存添加到ASP.NET Core响应

米格尔·莫拉(Miguel Moura)

使用ASP.NET Core 3.1,我创建了一个中间件,如下所示:

public class SitemapMiddleware {
  
  private readonly RequestDelegate _next;

  public SitemapMiddleware(RequestDelegate next) {
    
    _next = next;

  }

  public async Task InvokeAsync(HttpContext context, ISitemapService sitemapService) {

    if (context.Request.Path.StartsWithSegments("sitemap.xml")) {

      Sitemap sitemap = await sitemapService.GetAsync();

      context.Response.ContentType = "application/xml";

      context.Response.Headers.Add("Cache-Control", "public,max-age=20");

      await context.Response.WriteAsync(sitemap.Build(), Encoding.UTF8);

    } else {

      await _next(context);
    
    }

  }

}

当我在浏览器中访问“ sitemap.xml”时,得到的响应具有正确的内容。

但是当我在接下来的20秒内再次访问它时,代码将再次执行。

我正在添加“ Cache-Control”标头,并检查了它是否在响应中。

为什么再次执行代码?

马丁·德罗兹克(MartinDrozdík)

如果不想依靠HTTP缓存,则可以使用ASP.NET缓存,例如内存缓存。我整理了一个与我使用的类似的小例子。可能有帮助。

public class SitemapController : Controller
        {
            const string SITEMAP_CACHE_KEY = "SitemapNodesCacheKey";
    
        readonly IMemoryCache cache;

        public SitemapController(IMemoryCache cache)
        {
            this.cache = cache;
        }

        /// <summary>
        /// Returns sitemap of this web.
        /// Handles caching etc.
        /// </summary>
        /// <returns></returns>
        protected string GetSitemap()
        {
            //Cache not found
            if (!cache.TryGetValue(SITEMAP_CACHE_KEY, out var cacheEntry))
            {
                cacheEntry = "SOME CACHE TEXT/STRUCTURE HERE";

                //Set cache options
                var cacheEntryOptions = new MemoryCacheEntryOptions()
                    .SetSlidingExpiration(TimeSpan.FromHours(8))
                    .SetAbsoluteExpiration(TimeSpan.FromHours(24));

                //Save data in cache
                cache.Set(SITEMAP_CACHE_KEY, cacheEntry, cacheEntryOptions);
            }


            return cacheEntry as string;
        }

        [HttpPost("/sitemap/update")]
        public IActionResult UpdateSitemap()
        {
            cache.Remove(SITEMAP_CACHE_KEY);

            return Ok();
        }

        [Route("/sitemap.xml")]
        public IActionResult SitemapFile()
        {
            return Content(GetSitemap(), "text/xml");
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将响应标头添加到ASP.NET Core中间件

来自分类Dev

将Microsoft.EntityFrameworkCore.Tools添加到ASP.NET Core项目

来自分类Dev

在Visual Studio 2015中将Angular Material添加到ASP.NET CORE项目

来自分类Dev

将Swagger添加到ASP.Net Core Web API

来自分类Dev

无法将文件上传功能添加到项目-ASP.Net MVC Core 3.0

来自分类Dev

将Cookie添加到Asp.Net Core中依赖注入的HttpClient中

来自分类Dev

如何将LinkGenerator添加到ASP.NET Core?

来自分类Dev

如何正确地将脚本添加到ASP.NET Core部分视图?

来自分类Dev

将web.config文件添加到Asp.Net Core项目

来自分类Dev

ASP.NET Core 3.1-将子项添加到剃刀局部视图

来自分类Dev

将列表参数添加到ASP.NET Core模型

来自分类Dev

将 xml 文件添加到 ASP.NET Core http post 请求

来自分类Dev

如何将新列添加到 Identity RoleClaims 表中(asp net core)

来自分类Dev

将完整的.NET添加到.NET Core库

来自分类Dev

ASP.NET Core WebAPI:内存缓存与响应缓存

来自分类Dev

无法将“ WindowsAzure.Storage”依赖项添加到.Net Core(ASP.NET 5)类库

来自分类Dev

将nlog添加到.net core 3.0

来自分类Dev

将 zkemkeeper dll 添加到 .net Core 2

来自分类Dev

asp.net core 3响应缓存未按预期工作

来自分类Dev

将单字节添加到响应时,ASP.NET WebAPI输出的速度降低40倍

来自分类Dev

将'access-control-allow-origin'响应添加到Asp.NET中的选项预检请求

来自分类Dev

将addint输入文本框动态添加到Asp.Net core View C#+ JS

来自分类Dev

如何通过IdentityServer4将OpenIdConnect添加到ASP.NET Core ServerSide Blazor Web应用程序?

来自分类Dev

将新表添加到带有标识的 ASP .NET Core MVC 应用程序中

来自分类Dev

尝试将 Irepositories 添加到具有 addScoped ASP.Net core 2.1 的服务时出错

来自分类Dev

ASP.NET Core MVC - 将 DB 绑定复选框添加到 Create.cshtml

来自分类Dev

在VS2015中将MVC添加到空ASP.NET 5项目中:空500响应

来自分类Dev

.NET Core / EF.Core 3+将控制台日志添加到DbContext

来自分类Dev

ASP.NET将列动态添加到Gridview

Related 相关文章

  1. 1

    将响应标头添加到ASP.NET Core中间件

  2. 2

    将Microsoft.EntityFrameworkCore.Tools添加到ASP.NET Core项目

  3. 3

    在Visual Studio 2015中将Angular Material添加到ASP.NET CORE项目

  4. 4

    将Swagger添加到ASP.Net Core Web API

  5. 5

    无法将文件上传功能添加到项目-ASP.Net MVC Core 3.0

  6. 6

    将Cookie添加到Asp.Net Core中依赖注入的HttpClient中

  7. 7

    如何将LinkGenerator添加到ASP.NET Core?

  8. 8

    如何正确地将脚本添加到ASP.NET Core部分视图?

  9. 9

    将web.config文件添加到Asp.Net Core项目

  10. 10

    ASP.NET Core 3.1-将子项添加到剃刀局部视图

  11. 11

    将列表参数添加到ASP.NET Core模型

  12. 12

    将 xml 文件添加到 ASP.NET Core http post 请求

  13. 13

    如何将新列添加到 Identity RoleClaims 表中(asp net core)

  14. 14

    将完整的.NET添加到.NET Core库

  15. 15

    ASP.NET Core WebAPI:内存缓存与响应缓存

  16. 16

    无法将“ WindowsAzure.Storage”依赖项添加到.Net Core(ASP.NET 5)类库

  17. 17

    将nlog添加到.net core 3.0

  18. 18

    将 zkemkeeper dll 添加到 .net Core 2

  19. 19

    asp.net core 3响应缓存未按预期工作

  20. 20

    将单字节添加到响应时,ASP.NET WebAPI输出的速度降低40倍

  21. 21

    将'access-control-allow-origin'响应添加到Asp.NET中的选项预检请求

  22. 22

    将addint输入文本框动态添加到Asp.Net core View C#+ JS

  23. 23

    如何通过IdentityServer4将OpenIdConnect添加到ASP.NET Core ServerSide Blazor Web应用程序?

  24. 24

    将新表添加到带有标识的 ASP .NET Core MVC 应用程序中

  25. 25

    尝试将 Irepositories 添加到具有 addScoped ASP.Net core 2.1 的服务时出错

  26. 26

    ASP.NET Core MVC - 将 DB 绑定复选框添加到 Create.cshtml

  27. 27

    在VS2015中将MVC添加到空ASP.NET 5项目中:空500响应

  28. 28

    .NET Core / EF.Core 3+将控制台日志添加到DbContext

  29. 29

    ASP.NET将列动态添加到Gridview

热门标签

归档