/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Shared/Debugger/HttpContextDebugFormatter.cs
116 строк
4 KB
James Newton-King
Improve debugger display in Microsoft.AspNetCore.Http (#49861)
08 авг 2023, 05:07
Не верифицирован
08 авг 2023, 05:07
693bf75
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using System.Text; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; namespace Microsoft.AspNetCore.Shared; internal static class HttpContextDebugFormatter { public static string ResponseToString(HttpResponse response, string? reasonPhrase) { var sb = new StringBuilder(); sb.Append(response.StatusCode); var resolvedReasonPhrase = ResolveReasonPhrase(response, reasonPhrase); if (!string.IsNullOrEmpty(resolvedReasonPhrase)) { sb.Append(' '); sb.Append(resolvedReasonPhrase); } if (!string.IsNullOrEmpty(response.ContentType)) { sb.Append(' '); sb.Append(response.ContentType); } return sb.ToString(); } public static string RequestToString(HttpRequest request) { var sb = new StringBuilder(); if (!string.IsNullOrEmpty(request.Method)) { sb.Append(request.Method); sb.Append(' '); } GetRequestUrl(sb, request, includeQueryString: true); if (!string.IsNullOrEmpty(request.Protocol)) { sb.Append(' '); sb.Append(request.Protocol); } if (!string.IsNullOrEmpty(request.ContentType)) { sb.Append(' '); sb.Append(request.ContentType); } return sb.ToString(); } public static string ContextToString(HttpContext context, string? reasonPhrase) { var sb = new StringBuilder(); if (!string.IsNullOrEmpty(context.Request.Method)) { sb.Append(context.Request.Method); sb.Append(' '); } GetRequestUrl(sb, context.Request, includeQueryString: false); if (!string.IsNullOrEmpty(context.Request.Protocol)) { sb.Append(' '); sb.Append(context.Request.Protocol); } if (!string.IsNullOrEmpty(context.Request.ContentType)) { sb.Append(' '); sb.Append(context.Request.ContentType); } sb.Append(' '); sb.Append(context.Response.StatusCode); var resolvedReasonPhrase = ResolveReasonPhrase(context.Response, reasonPhrase); if (!string.IsNullOrEmpty(resolvedReasonPhrase)) { sb.Append(' '); sb.Append(resolvedReasonPhrase); } return sb.ToString(); } private static string? ResolveReasonPhrase(HttpResponse response, string? reasonPhrase) { return response.HttpContext.Features.Get<IHttpResponseFeature>()?.ReasonPhrase ?? reasonPhrase; } private static void GetRequestUrl(StringBuilder sb, HttpRequest request, bool includeQueryString) { // The URL might be missing because the context was manually created in a test, e.g. new DefaultHttpContext() if (string.IsNullOrEmpty(request.Scheme) && !request.Host.HasValue && !request.PathBase.HasValue && !request.Path.HasValue && !request.QueryString.HasValue) { sb.Append("(unspecified)"); return; } // If some parts of the URL are provided then default the significant parts to avoid a werid output. var scheme = request.Scheme; if (string.IsNullOrEmpty(scheme)) { scheme = "(unspecified)"; } var host = request.Host.Value; if (string.IsNullOrEmpty(host)) { host = "(unspecified)"; } sb.Append(CultureInfo.InvariantCulture, $"{scheme}://{host}{request.PathBase.Value}{request.Path.Value}{(includeQueryString ? request.QueryString.Value : string.Empty)}"); } }