CWDev.StaticFileOptionsExtender
2.0.6
dotnet add package CWDev.StaticFileOptionsExtender --version 2.0.6
NuGet\Install-Package CWDev.StaticFileOptionsExtender -Version 2.0.6
<PackageReference Include="CWDev.StaticFileOptionsExtender" Version="2.0.6" />
paket add CWDev.StaticFileOptionsExtender --version 2.0.6
#r "nuget: CWDev.StaticFileOptionsExtender, 2.0.6"
// Install CWDev.StaticFileOptionsExtender as a Cake Addin #addin nuget:?package=CWDev.StaticFileOptionsExtender&version=2.0.6 // Install CWDev.StaticFileOptionsExtender as a Cake Tool #tool nuget:?package=CWDev.StaticFileOptionsExtender&version=2.0.6
Static File Options Extender
Purpose:
- Enable .NET applications to serve static files which have been compressed via
gzip
and/orbrotli
compression algorithms, correctly mapping their original file's content-types and response headers. - Allow user to extend the Options Class to add additional compression types and configure mappings.
To Use:
- Leverage the package's
static using
directive* - Call the package's
GetOptions
method as the argument toUseStaticFiles(...)
*
this will pass the extendedStaticFileOptions
while building the request pipeline.
using static CWDev.StaticFileOptionsExtender; // <-- *
var builder = WebApplication.CreateBuilder(args);
// ...
var app = builder.Build();
// ...
app.UseStaticFiles(GetOptions()); // <-- *
Abstract:
.NET WebApplicationBuilder
can be leveraged to configure the application HTTP Request Pipeline.
Within that Pipeline StaticFileMiddleware
can be used to serve static files.
Typically, the app.UseStaticFiles(StaticFileOptions options)
middleware configures a few key
steps. This library is mostly concerned with TWO -- Providers and Handlers -- regarding:
- Mapping files
content-types
:IContentTypeProvider StaticFileOptions.ContentTypeProvider
*
- Adding or changing the response headers:
Action<StaticFileResponseContext> StaticFileOptions.OnPrepareResponse
*
StaticFileOptions StaticFileOptionsExtender.GetOptions
public static StaticFileOptions GetOptions()
{
var customFileTypeProvider = new CustomContentTypeProvider();
return new StaticFileOptions
{
ContentTypeProvider = customFileTypeProvider, // <-- *
OnPrepareResponse = (StaticFileResponseContext context) => // <-- *
{
if (CompressionEncodings.TryGetValue(Path.GetExtension(context.File.Name), out string? encoding))
{
context.Context.Response.Headers.ContentEncoding = encoding;
}
}
};
}
Specifically, StaticFileOptionsExtender
leverages a class inheriting from IContentTypeProvider
to extend the MIME type mappings for the 380 most commonly used file types (default).
This library originally was built to enable .NET to serve static files which have been compressed for WebGL
by building from Unity.
Overview:
Release-Notes:
- CHANGELOG
- The format is based on Keep a Changelog and this project adheres to Semantic Versioning
- Commits follow Conventional Commits patterns
Contribute:
- Please open a GitHub Issue with concerns.
- Open a PR if you have a code proposal.
- I will respond in
<=24
hours with thoughts and/or solution.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. |
-
net8.0
- Microsoft.AspNetCore.StaticFiles (>= 2.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
=== Changelog
Also available at https://github.com/colinwilliams91/StaticFileOptionsExtender/blob/main/CHANGELOG.md
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
--- Unreleased
--- Added
- Cross-platform compatibility for .NET (Windows, macOS, Linux)
--- [Version 2.0.6](;;;) - 07-05-25
--- Changed
- `PreprocessChangelog.ps1` `CHANGELOG` formatting to correct remote rel path
- after tests on `nuget Pack` exec in MSBuild yield bad results (this is another test)
--- [Version 2.0.5](./tree/v2.0.5) - 07-05-25:
--- Changed
- `PreprocessChangelog.ps1` formats `CHANGELOG` with links to remoge release-tag branches
- testing on pack for MSBuild exec w/ XML element arg
--- [Version 2.0.4](./tree/v2.0.4) - 07-05-25:
--- Fixed
- `PreprocessChangelog.ps1` string replace methods order so formatting finds correct chars and replaces
--- [Version 2.0.3](./tree/v2.0.3) - 06-29-25:
--- Changed
- Move CWDev icon to `Assets\`
- Try to remove `Docs/` literal from documentation filenames
--- [Version 2.0.2](./tree/v2.0.5) - 06-29-25:
--- Added
- CHANGELOG_PLAIN.txt to format release notes readability for nuget.org
- unpacked scripts for preprocessing and cleanup targetting Pack
--- Changed
- README readability
- DOCUMENTATION files to `\Docs` directory
--- [Version 2.0.1](./tree/v2.0.1) - 06-28-25:
--- Added
- README documentation on...
- to contribute...
- references to format and patterns for documentation (repo `CHANGELOG`)
--- Changed
- README documentation on...
- how to use for updated Namespace (`CWDev`)
--- [Version 2.0.0](./tree/v2.0.0) - 06-28-25:
--- Added
- Release notes to `nuspec`
- Git tags to release commits
--- Changed
- Renamed namespace from `StaticFileOptionsExtender` to `CWDev` to remove redundancy in `using static` statement
--- [Version 1.0.2](./tree/v1.0.2) - 06-28-24:
--- Changed
- README documentation on...
- how to use...
--- [Version 1.0.0](./tree/v1.0.0) - 06-28-24:
--- Added
- `StaticFileOptionsExtender` namespace
- `StaticFileOptionsExtender` static class
- Namespace Icon
- License
- README documentation on...
- purpose...
- abstract...