| File: HttpRequestMessageExtensions.cs | Web Access |
| Project: src\aspnetcore\src\HttpClientFactory\Polly\src\Microsoft.Extensions.Http.Polly.csproj (Microsoft.Extensions.Http.Polly) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Net.Http; using Microsoft.Extensions.Http; namespace Polly; /// <summary> /// Extension methods for <see cref="HttpRequestMessage"/> Polly integration. /// </summary> public static class HttpRequestMessageExtensions { #pragma warning disable CA1802 // Use literals where appropriate. Using a static field for reference equality internal static readonly string PolicyExecutionContextKey = "PolicyExecutionContext"; #pragma warning restore CA1802 /// <summary> /// Gets the <see cref="Context"/> associated with the provided <see cref="HttpRequestMessage"/>. /// </summary> /// <param name="request">The <see cref="HttpRequestMessage"/>.</param> /// <returns>The <see cref="Context"/> if set, otherwise <c>null</c>.</returns> /// <remarks> /// The <see cref="PolicyHttpMessageHandler"/> will attach a context to the <see cref="HttpResponseMessage"/> prior /// to executing a <see cref="Policy"/>, if one does not already exist. The <see cref="Context"/> will be provided /// to the policy for use inside the <see cref="Policy"/> and in other message handlers. /// </remarks> public static Context? GetPolicyExecutionContext(this HttpRequestMessage request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } request.Properties.TryGetValue(PolicyExecutionContextKey, out var context); return context as Context; } /// <summary> /// Sets the <see cref="Context"/> associated with the provided <see cref="HttpRequestMessage"/>. /// </summary> /// <param name="request">The <see cref="HttpRequestMessage"/>.</param> /// <param name="context">The <see cref="Context"/>, may be <c>null</c>.</param> /// <remarks> /// The <see cref="PolicyHttpMessageHandler"/> will attach a context to the <see cref="HttpResponseMessage"/> prior /// to executing a <see cref="Policy"/>, if one does not already exist. The <see cref="Context"/> will be provided /// to the policy for use inside the <see cref="Policy"/> and in other message handlers. /// </remarks> public static void SetPolicyExecutionContext(this HttpRequestMessage request, Context? context) { if (request == null) { throw new ArgumentNullException(nameof(request)); } request.Properties[PolicyExecutionContextKey] = context; } }