Added caching proxy for favicone to reduce load and increase performance
This commit is contained in:
parent
e1412eef52
commit
38f02d0b7c
|
@ -1,4 +1,5 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.OutputCaching;
|
||||
|
||||
namespace Wave.Controllers;
|
||||
|
||||
|
@ -9,7 +10,8 @@ public class ApiProxy(HttpClient client) : ControllerBase {
|
|||
|
||||
[Route("favicon/{host}")]
|
||||
[Produces("image/x-icon")]
|
||||
[ResponseCache(Duration = 60*60*24*30, Location = ResponseCacheLocation.Any)]
|
||||
[OutputCache(Duration = 60*60*24*30)]
|
||||
[ResponseCache(Duration = 60*60*24, Location = ResponseCacheLocation.Any)]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task GetFavicon(string host, [FromQuery] int size = 32) {
|
||||
|
@ -26,6 +28,10 @@ public class ApiProxy(HttpClient client) : ControllerBase {
|
|||
|
||||
|
||||
private async Task<HttpResponseMessage> DoProxy(string url) {
|
||||
return await Client.SendAsync(new HttpRequestMessage(HttpMethod.Get, url));
|
||||
return await Client.SendAsync(new HttpRequestMessage(HttpMethod.Get, url) {
|
||||
Headers = {
|
||||
{"User-Agent", "Wave/1.0 favicon endpoint caching proxy"}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@
|
|||
builder.Services.AddControllers(options => {
|
||||
options.OutputFormatters.Add(new SyndicationFeedFormatter());
|
||||
});
|
||||
builder.Services.AddOutputCache();
|
||||
|
||||
#region Data Protection & Redis
|
||||
|
||||
|
@ -41,6 +42,14 @@
|
|||
EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
|
||||
ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
|
||||
});
|
||||
builder.Services.AddStackExchangeRedisCache(options => {
|
||||
options.Configuration = redisUri;
|
||||
options.InstanceName = "WaveDistributedCache";
|
||||
});
|
||||
builder.Services.AddStackExchangeRedisOutputCache(options => {
|
||||
options.Configuration = redisUri;
|
||||
options.InstanceName = "WaveOutputCache";
|
||||
});
|
||||
} else {
|
||||
builder.Services.AddDataProtection()
|
||||
.UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration() {
|
||||
|
@ -138,6 +147,7 @@
|
|||
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
||||
}
|
||||
|
||||
|
||||
app.UseStaticFiles(new StaticFileOptions {
|
||||
ContentTypeProvider = new FileExtensionContentTypeProvider {
|
||||
Mappings = {
|
||||
|
@ -153,6 +163,7 @@
|
|||
app.MapAdditionalIdentityEndpoints();
|
||||
|
||||
app.MapControllers();
|
||||
app.UseOutputCache();
|
||||
|
||||
app.UseRequestLocalization();
|
||||
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OutputCaching.StackExchangeRedis" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
|
||||
|
|
Loading…
Reference in a new issue