Как вернуть разные заголовки управления кешем для разных конечных точек, используя минимальные API-интерфейсы ASP.NET?
Я хотел бы вернуть другое значение заголовка управления кешем для разных конечных точек, используя минимальные API-интерфейсы ASP.NET. Как это сделать без контроллеров?
Это может быть выполнено с помощью контроллеров следующим образом:
using Microsoft.AspNetCore.Mvc;
namespace CacheTest;
[ApiController]
public class TestController : ControllerBase
{
[HttpGet, Route("cache"), ResponseCache(Duration = 3600)]
public ActionResult GetCache() => Ok("cache");
[HttpGet, Route("nocache"), ResponseCache(Location = ResponseCacheLocation.None, Duration = 0)]
public ActionResult GetNoCache() => Ok("no cache");
}
Первая конечная точка возвращает заголовок
Cache-Control: public,max-age=3600
.
Вторая конечная точка возвращает заголовок
Cache-Control: no-cache,max-age=0
.
1 ответ
Вы можете использоватьRequestDelegate
перегрузка , которая позволяет вам взаимодействовать с
HttpContext
а также
HttpResponse
так что вы можете установить заголовки кеша, например:
app.MapGet("/", httpContext =>
{
httpContext.Response.Headers[HeaderNames.CacheControl] =
"public,max-age=" + 3600;
return Task.FromResult("Hello World!");
});
Вы можете написать простой метод расширения, чтобы добавить это для вас, например
public static class HttpResponseExtensions
{
public static void AddCache(this HttpResponse response, int seconds)
{
response.Headers[HeaderNames.CacheControl] =
"public,max-age=" + 10000;
}
public static void DontCache(this HttpResponse response)
{
response.Headers[HeaderNames.CacheControl] = "no-cache";
}
}
... что делает ваш минимальный метод API менее подробным:
app.MapGet("/", httpContext =>
{
httpContext.Response.AddCache(3600);
// or
httpContext.Response.DontCache();
return Task.FromResult("Hello World!");
});