BLun.ETagMiddleware
1.2.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package BLun.ETagMiddleware --version 1.2.0
NuGet\Install-Package BLun.ETagMiddleware -Version 1.2.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BLun.ETagMiddleware" Version="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BLun.ETagMiddleware --version 1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: BLun.ETagMiddleware, 1.2.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BLun.ETagMiddleware as a Cake Addin #addin nuget:?package=BLun.ETagMiddleware&version=1.2.0 // Install BLun.ETagMiddleware as a Cake Tool #tool nuget:?package=BLun.ETagMiddleware&version=1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ETagMiddleware
ETag Middleware for Asp.Net Core -.NetStandard 2.0
Inspiration
I was inspired by Mads Kristensen Blog. The Example from him, can you find here as code. Thanks for your artikle!
Requirements
.NETStandard2.0
Install
Download from Nuget.org
"dependencies": {
"BLun.ETagMiddleware": "<version>"
}
Featurs
- BLun.ETagMiddleware for Asp.Net Core Http
- Microsoft.AspNetCore.Http.IMiddleware
- BLun.ETagAttribute for Asp.Net Core Mvc
- Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter
- Supports
- Microsoft.Extensions.Logging
- Microsoft.Extensions.DependencyInjection
- Microsoft.Extensions.Options (Configuration)
Usage as Middleware (Microsoft.AspNetCore.Http.IMiddleware)
The default usage are:
using BLun.ETagMiddleware;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Required
// Add a Middleware for each Controller Request with
// algorithmus = SHA1 = default
// etag validator = Strong = default
// body content length = 40 * 1024 = default
services.AddETag();
}
// Add "app.UseETag();" to "Configure" method in Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
// Add a Middleware for each Controller Request
// Atention: add app.UseETag after app.UseStaticFiles, the order is important for performance
app.UseETag();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
You can configuratione your own option prameters:
using BLun.ETagMiddleware;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Required
// Add ETagOption with own global configurations
services.AddETag(new ETagOption()
{
// algorithmus
// SHA1 = default
// SHA265
// SHA384
// SHA512
// MD5
ETagAlgorithm = ETagAlgorithm.SHA265,
// etag validator
// Strong = default
// Weak
ETagValidator = ETagValidator.Weak,
// body content length
// 40 * 1024 = default
BodyMaxLength = 20 * 1024
});
}
// Add "app.UseETag();" to "Configure" method in Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
// Add a Middleware for each Controller Request
// Atention: add app.UseETag after app.UseStaticFiles, the order is important
app.UseETag();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Usage as ETagAttribute (Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter)
using BLun.ETagMiddleware;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add ETagOption with own global configurations
services.AddETag(new ETagOption()
{
// algorithmus
// SHA1 = default
// SHA265
// SHA384
// SHA512
// MD5
ETagAlgorithm = ETagAlgorithm.SHA265,
// etag validator
// Strong = default
// Weak
ETagValidator = ETagValidator.Weak,
// body content length
// 40 * 1024 = default
BodyMaxLength = 20 * 1024
});
}
// Add "app.UseETag();" to "Configure" method in Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
// Add a Middleware for each Controller Request
// Atention: add app.UseETag after app.UseStaticFiles, the order is important
// deactivate or combine with Middlewar
// the EtagAttributes didn't need the Middleware
// app.UseETag();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
// Can add on controller
[ETag(ETagAlgorithm = ETagAlgorithm.SHA521)]
public class HomeController : Controller
{
// Can add on methods
[ETag(ETagAlgorithm = ETagAlgorithm.SHA265)]
public IActionResult Index()
{
return View();
}
[ETag(ETagValidator = ETagValidator.Weak)]
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
[ETag(ETagValidator = ETagValidator.Strong, BodyMaxLength = 30 * 1024, ETagAlgorithm = ETagAlgorithm.SHA384)]
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
Unittested
The Code is unittestet.
Vision
I would develope muche more test for it. Add more features for Cache-Controle-Dirictives with ETag.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Microsoft.AspNetCore.Http.Abstractions (>= 2.0.1)
- Microsoft.AspNetCore.Mvc.Abstractions (>= 2.0.0)
- Microsoft.AspNetCore.WebUtilities (>= 2.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 2.0.0)
- Microsoft.Extensions.Options (>= 2.0.0)
- Microsoft.Net.Http.Headers (>= 2.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
fix Dependecies