| File: Extensions\RequestTrailerExtensions.cs | Web Access |
| Project: src\aspnetcore\src\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj (Microsoft.AspNetCore.Http.Abstractions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Http; /// <summary> /// HttpRequest extensions for working with request trailing headers. /// </summary> public static class RequestTrailerExtensions { /// <summary> /// Gets the request "Trailer" header that lists which trailers to expect after the body. /// </summary> /// <param name="request"></param> /// <returns></returns> public static StringValues GetDeclaredTrailers(this HttpRequest request) { return request.Headers.GetCommaSeparatedValues(HeaderNames.Trailer); } /// <summary> /// Indicates if the request supports receiving trailer headers. /// </summary> /// <param name="request"></param> /// <returns></returns> public static bool SupportsTrailers(this HttpRequest request) { return request.HttpContext.Features.Get<IHttpRequestTrailersFeature>() != null; } /// <summary> /// Checks if the request supports trailers and they are available to be read now. /// This does not mean that there are any trailers to read. /// </summary> /// <param name="request"></param> /// <returns></returns> public static bool CheckTrailersAvailable(this HttpRequest request) { return request.HttpContext.Features.Get<IHttpRequestTrailersFeature>()?.Available == true; } /// <summary> /// Gets the requested trailing header from the response. Check <see cref="SupportsTrailers"/> /// or a NotSupportedException may be thrown. /// Check <see cref="CheckTrailersAvailable" /> or an InvalidOperationException may be thrown. /// </summary> /// <param name="request"></param> /// <param name="trailerName"></param> public static StringValues GetTrailer(this HttpRequest request, string trailerName) { var feature = request.HttpContext.Features.Get<IHttpRequestTrailersFeature>(); if (feature == null) { throw new NotSupportedException("This request does not support trailers."); } return feature.Trailers[trailerName]; } }