Microsoft.AspNetCore.HeaderParsing 8.4.0

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Microsoft.AspNetCore.HeaderParsing --version 8.4.0
NuGet\Install-Package Microsoft.AspNetCore.HeaderParsing -Version 8.4.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="Microsoft.AspNetCore.HeaderParsing" Version="8.4.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Microsoft.AspNetCore.HeaderParsing --version 8.4.0
#r "nuget: Microsoft.AspNetCore.HeaderParsing, 8.4.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 Microsoft.AspNetCore.HeaderParsing as a Cake Addin
#addin nuget:?package=Microsoft.AspNetCore.HeaderParsing&version=8.4.0

// Install Microsoft.AspNetCore.HeaderParsing as a Cake Tool
#tool nuget:?package=Microsoft.AspNetCore.HeaderParsing&version=8.4.0

Microsoft.AspNetCore.HeaderParsing

This package provides services for strongly typed header parsing and value caching.

In particular:

  • There are many different headers with subtle format differences that are hard to parse correctly in all cases. This package provides predefined parsers for commonly used headers.
  • Your application may parse the same header value multiple times per request. These APIs automatically cache the parsed values of these headers to make your application faster.
  • This package also provides logging and metering of bad header values.

Install the package

From the command-line:

dotnet add package Microsoft.AspNetCore.HeaderParsing

Or directly in the C# project file:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.HeaderParsing" Version="[CURRENTVERSION]" />
</ItemGroup>

Usage Example

Registering the services

The services can be registered using one of the AddHeaderParsing overloads:

public static IServiceCollection AddHeaderParsing(this IServiceCollection services)
public static IServiceCollection AddHeaderParsing(this IServiceCollection services, Action<HeaderParsingOptions> configure)
public static IServiceCollection AddHeaderParsing(this IServiceCollection services, IConfigurationSection section)

For example:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHeaderParsing();

var app = builder.Build();

Registering the parsers

For each header that you want to parse, you need to register an instance of a HeaderSetup class which will define how a named parser should be parsed, and if the resulting strongly-typed values should be cached in memory.

[!NOTE] Instances of HeaderSetup for the most common headers are available in the CommonHeaders class.

[!IMPORTANT] Instances of HeaderSetup should be reused during the application lifetime. It is recommended to keep their reference in objects registered as singletons.

var headerRegistry = app.Services.GetRequiredService<IHeaderRegistry>();

var encodingKey = headerRegistry.Register(CommonHeaders.AcceptEncoding);

Using the parsers

The following example parses the Accept-Encoding request header to return a list of values:

app.MapGet("/", string (HttpContext context) =>
{
    if (context.Request.TryGetHeaderValue(encodingKey, out var encoding))
    {
        return string.Join(", ", encoding);
    }

    return "";
});

List of available common parsers

The CommonHeaders class contains the following reusable header parsers:

Options

The HeaderParsingOptions class is used to configure common behaviors for this feature.

  • You can pre-configure default values to be returned when the current HTTP request contains headers for which you have not configured parsing. See the DefaultValues option.
  • You can change the number of cached values using the MaxCachedValuesPerHeader option. If not configured the DefaultMaxCachedValuesPerHeader value will be used.

Metrics

The package generates the following metrics:

Metric name Metric value Dimension Dimension value
HeaderParsing.ParsingErrors Increased by 1 with every parsing error HeaderName Header name
Kind Error message returned by the TryParse() method
HeaderParsing.CacheAccess Increased by 1 with every cache hit or miss HeaderName Header name
Type Either Hit or Miss for the internal header cache hits and misses respectively

Custom headers parsing

Although this package provides support for parsing many HTTP headers, you sometimes need to parse custom headers. You can easily extend the header parsing model to support your custom headers by implementing the abstract class HeaderParser and then register an instance of this class in the IHeaderRegistry interface.

Feedback & Contributing

We welcome feedback and contributions in our GitHub repo.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
9.0.0-preview.3.24209.3 60 4/11/2024
9.0.0-preview.2.24157.4 51 3/12/2024
9.0.0-preview.1.24108.1 62 2/13/2024
8.4.0 175 4/9/2024
8.3.0 166 3/12/2024
8.2.0 180 2/13/2024
8.1.0 429 1/9/2024
8.0.0 374 11/14/2023
8.0.0-rc.2.23510.2 75 10/10/2023
8.0.0-rc.1.23453.1 104 9/12/2023
8.0.0-preview.7.23407.5 96 8/8/2023
8.0.0-preview.6.23360.2 82 7/12/2023
8.0.0-preview.5.23308.3 75 6/14/2023
8.0.0-preview.4.23273.7 74 5/23/2023