diff --git a/src/FilterLists.Api/CacheKeys.cs b/src/FilterLists.Api/CacheKeys.cs
new file mode 100644
index 000000000..4e0666dc4
--- /dev/null
+++ b/src/FilterLists.Api/CacheKeys.cs
@@ -0,0 +1,9 @@
+// https://github.com/aspnet/Docs/blob/master/aspnetcore/performance/caching/memory/sample/WebCache/CacheKeys.cs
+
+namespace FilterLists.Api
+{
+ public static class CacheKeys
+ {
+ public static readonly string Entry = "_Entry";
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs
index e0e86db85..66f6f9b15 100644
--- a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs
+++ b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs
@@ -13,6 +13,7 @@ public static void AddFilterListsApi(this IServiceCollection services)
services.AddMvcCustom();
services.AddApiVersioning();
services.AddResponseCaching();
+ services.AddMemoryCache();
services.AddSwaggerGenCustom();
}
diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj
index 4a60b0fe2..cc06cb63e 100644
--- a/src/FilterLists.Api/FilterLists.Api.csproj
+++ b/src/FilterLists.Api/FilterLists.Api.csproj
@@ -26,6 +26,7 @@
+
diff --git a/src/FilterLists.Api/Startup.cs b/src/FilterLists.Api/Startup.cs
index 0133674f2..3e1a8eaed 100644
--- a/src/FilterLists.Api/Startup.cs
+++ b/src/FilterLists.Api/Startup.cs
@@ -28,19 +28,18 @@ public void Configure(IApplicationBuilder app)
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
-
app.UseResponseCaching();
-
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/v1/swagger.json", "FilterLists API V1");
c.RoutePrefix = "docs";
});
-
app.UseStaticFiles();
-
- app.UseMvc(routes => { routes.MapRoute("default", "v{version:apiVersion}/{controller=Default}/{action=Get}/{id?}"); });
+ app.UseMvc(routes =>
+ {
+ routes.MapRoute("default", "v{version:apiVersion}/{controller=Default}/{action=Get}/{id?}");
+ });
}
}
}
\ No newline at end of file
diff --git a/src/FilterLists.Api/V1/Controllers/ListsController.cs b/src/FilterLists.Api/V1/Controllers/ListsController.cs
index a0759c33b..cd306da83 100644
--- a/src/FilterLists.Api/V1/Controllers/ListsController.cs
+++ b/src/FilterLists.Api/V1/Controllers/ListsController.cs
@@ -1,5 +1,7 @@
-using FilterLists.Services.Contracts;
+using System;
+using FilterLists.Services.Contracts;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
namespace FilterLists.Api.V1.Controllers
{
@@ -9,16 +11,22 @@ namespace FilterLists.Api.V1.Controllers
public class ListsController : Controller
{
private readonly IFilterListService filterListService;
+ private readonly IMemoryCache memoryCache;
- public ListsController(IFilterListService filterListService)
+ public ListsController(IMemoryCache memoryCache, IFilterListService filterListService)
{
+ this.memoryCache = memoryCache;
this.filterListService = filterListService;
}
[HttpGet]
public IActionResult Get()
{
- return Json(filterListService.GetAllSummaries());
+ return memoryCache.GetOrCreate(CacheKeys.Entry, entry =>
+ {
+ entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400);
+ return Json(filterListService.GetAllSummaries());
+ });
}
}
}
\ No newline at end of file
diff --git a/src/FilterLists.Web/CacheKeys.cs b/src/FilterLists.Web/CacheKeys.cs
new file mode 100644
index 000000000..4f81731cf
--- /dev/null
+++ b/src/FilterLists.Web/CacheKeys.cs
@@ -0,0 +1,9 @@
+// https://github.com/aspnet/Docs/blob/master/aspnetcore/performance/caching/memory/sample/WebCache/CacheKeys.cs
+
+namespace FilterLists.Web
+{
+ public static class CacheKeys
+ {
+ public static readonly string Entry = "_Entry";
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Web/Controllers/HomeController.cs b/src/FilterLists.Web/Controllers/HomeController.cs
index 24b36aff6..4e19389f5 100644
--- a/src/FilterLists.Web/Controllers/HomeController.cs
+++ b/src/FilterLists.Web/Controllers/HomeController.cs
@@ -1,13 +1,27 @@
+using System;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
namespace FilterLists.Web.Controllers
{
+ [ResponseCache(CacheProfileName = "Long-Lived")]
public class HomeController : Controller
{
+ private readonly IMemoryCache memoryCache;
+
+ public HomeController(IMemoryCache memoryCache)
+ {
+ this.memoryCache = memoryCache;
+ }
+
public IActionResult Index()
{
- return View();
+ return memoryCache.GetOrCreate(CacheKeys.Entry, entry =>
+ {
+ entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(86400);
+ return View();
+ });
}
public IActionResult Error()
diff --git a/src/FilterLists.Web/Controllers/SampleDataController.cs b/src/FilterLists.Web/Controllers/SampleDataController.cs
deleted file mode 100644
index 24b6de753..000000000
--- a/src/FilterLists.Web/Controllers/SampleDataController.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.AspNetCore.Mvc;
-
-namespace FilterLists.Web.Controllers
-{
- [Route("api/[controller]")]
- public class SampleDataController : Controller
- {
- private static readonly string[] Summaries =
- {
- "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
- };
-
- [HttpGet("[action]")]
- public IEnumerable WeatherForecasts()
- {
- var rng = new Random();
- return Enumerable.Range(1, 5).Select(index => new WeatherForecast
- {
- DateFormatted = DateTime.Now.AddDays(index).ToString("d"),
- TemperatureC = rng.Next(-20, 55),
- Summary = Summaries[rng.Next(Summaries.Length)]
- });
- }
-
- public class WeatherForecast
- {
- public string DateFormatted { get; set; }
- public int TemperatureC { get; set; }
- public string Summary { get; set; }
-
- public int TemperatureF => 32 + (int) (TemperatureC / 0.5556);
- }
- }
-}
\ No newline at end of file
diff --git a/src/FilterLists.Web/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Web/DependencyInjection/Extensions/ConfigureServicesCollection.cs
new file mode 100644
index 000000000..0d59f3e5a
--- /dev/null
+++ b/src/FilterLists.Web/DependencyInjection/Extensions/ConfigureServicesCollection.cs
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace FilterLists.Web.DependencyInjection.Extensions
+{
+ public static class ConfigureServicesCollection
+ {
+ public static void AddFilterListsWeb(this IServiceCollection services)
+ {
+ services.AddMvcCustom();
+ services.AddResponseCaching();
+ services.AddMemoryCache();
+ }
+
+ private static void AddMvcCustom(this IServiceCollection services)
+ {
+ services.AddMvc(options =>
+ {
+ options.CacheProfiles.Add("Long-Lived",
+ new CacheProfile
+ {
+ Duration = 86400
+ });
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj
index 869b1cb76..a8e17ed11 100644
--- a/src/FilterLists.Web/FilterLists.Web.csproj
+++ b/src/FilterLists.Web/FilterLists.Web.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/FilterLists.Web/Startup.cs b/src/FilterLists.Web/Startup.cs
index 91f8bb47a..43c5a6300 100644
--- a/src/FilterLists.Web/Startup.cs
+++ b/src/FilterLists.Web/Startup.cs
@@ -1,3 +1,4 @@
+using FilterLists.Web.DependencyInjection.Extensions;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
@@ -17,7 +18,7 @@ public Startup(IConfiguration configuration)
public void ConfigureServices(IServiceCollection services)
{
- services.AddMvc();
+ services.AddFilterListsWeb();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
@@ -32,12 +33,9 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env)
});
}
else
- {
app.UseExceptionHandler("/Home/Error");
- }
-
+ app.UseResponseCaching();
app.UseStaticFiles();
-
app.UseMvc(routes =>
{
routes.MapRoute(