From ef3e2637a81379626bd910032d4f0bdcd1dee646 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Tue, 29 Mar 2022 13:04:05 -0700 Subject: [PATCH 01/18] Caching known results --- src/Http/Http.Results/src/Results.cs | 18 +-- .../src/ResultsCache.StatusCodes.cs | 144 ++++++++++++++++++ .../src/ResultsCache.StatusCodes.tt | 98 ++++++++++++ src/Http/Http.Results/src/ResultsCache.cs | 15 ++ 4 files changed, 266 insertions(+), 9 deletions(-) create mode 100644 src/Http/Http.Results/src/ResultsCache.StatusCodes.cs create mode 100644 src/Http/Http.Results/src/ResultsCache.StatusCodes.tt create mode 100644 src/Http/Http.Results/src/ResultsCache.cs diff --git a/src/Http/Http.Results/src/Results.cs b/src/Http/Http.Results/src/Results.cs index 89b9c12bde7d..75759038a198 100644 --- a/src/Http/Http.Results/src/Results.cs +++ b/src/Http/Http.Results/src/Results.cs @@ -495,7 +495,7 @@ public static IResult RedirectToRoute(string? routeName = null, object? routeVal /// The status code to set on the response. /// The created object for the response. public static IResult StatusCode(int statusCode) - => new StatusCodeHttpResult(statusCode); + => ResultsCache.StatusCode(statusCode); /// /// Produces a response. @@ -503,14 +503,14 @@ public static IResult StatusCode(int statusCode) /// The value to be included in the HTTP response body. /// The created for the response. public static IResult NotFound(object? value = null) - => new NotFoundObjectHttpResult(value); + => value is null ? ResultsCache.NotFound : new NotFoundObjectHttpResult(value); /// /// Produces a response. /// /// The created for the response. public static IResult Unauthorized() - => new UnauthorizedHttpResult(); + => ResultsCache.Unauthorized; /// /// Produces a response. @@ -518,7 +518,7 @@ public static IResult Unauthorized() /// An error object to be included in the HTTP response body. /// The created for the response. public static IResult BadRequest(object? error = null) - => new BadRequestObjectHttpResult(error); + => error is null ? ResultsCache.BadRequest : new BadRequestObjectHttpResult(error); /// /// Produces a response. @@ -526,14 +526,14 @@ public static IResult BadRequest(object? error = null) /// An error object to be included in the HTTP response body. /// The created for the response. public static IResult Conflict(object? error = null) - => new ConflictObjectHttpResult(error); + => error is null ? ResultsCache.Conflict : new ConflictObjectHttpResult(error); /// /// Produces a response. /// /// The created for the response. public static IResult NoContent() - => new NoContentHttpResult(); + => ResultsCache.NoContent; /// /// Produces a response. @@ -541,7 +541,7 @@ public static IResult NoContent() /// The value to be included in the HTTP response body. /// The created for the response. public static IResult Ok(object? value = null) - => new OkObjectHttpResult(value); + => value is null ? ResultsCache.Ok : new OkObjectHttpResult(value); /// /// Produces a response. @@ -549,7 +549,7 @@ public static IResult Ok(object? value = null) /// An error object to be included in the HTTP response body. /// The created for the response. public static IResult UnprocessableEntity(object? error = null) - => new UnprocessableEntityObjectHttpResult(error); + => error is null ? ResultsCache.UnprocessableEntity : new UnprocessableEntityObjectHttpResult(error); /// /// Produces a response. @@ -705,7 +705,7 @@ public static IResult AcceptedAtRoute(string? routeName = null, object? routeVal /// /// Produces an empty result response, that when executed will do nothing. /// - public static IResult Empty { get; } = EmptyHttpResult.Instance; + public static IResult Empty { get; } = new EmptyHttpResult(); /// /// Provides a container for external libraries to extend diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs new file mode 100644 index 000000000000..02045accc4b0 --- /dev/null +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -0,0 +1,144 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// + +namespace Microsoft.AspNetCore.Http; + +using System.CodeDom.Compiler; + +[GeneratedCode("TextTemplatingFileGenerator", "")] +internal static partial class ResultsCache +{ + private static readonly StatusCodeHttpResult Status100Continue = new StatusCodeHttpResult(StatusCodes.Status100Continue); + private static readonly StatusCodeHttpResult Status101SwitchingProtocols = new StatusCodeHttpResult(StatusCodes.Status101SwitchingProtocols); + private static readonly StatusCodeHttpResult Status102Processing = new StatusCodeHttpResult(StatusCodes.Status102Processing); + private static readonly StatusCodeHttpResult Status200OK = new StatusCodeHttpResult(StatusCodes.Status200OK); + private static readonly StatusCodeHttpResult Status201Created = new StatusCodeHttpResult(StatusCodes.Status201Created); + private static readonly StatusCodeHttpResult Status202Accepted = new StatusCodeHttpResult(StatusCodes.Status202Accepted); + private static readonly StatusCodeHttpResult Status203NonAuthoritative = new StatusCodeHttpResult(StatusCodes.Status203NonAuthoritative); + private static readonly StatusCodeHttpResult Status204NoContent = new StatusCodeHttpResult(StatusCodes.Status204NoContent); + private static readonly StatusCodeHttpResult Status205ResetContent = new StatusCodeHttpResult(StatusCodes.Status205ResetContent); + private static readonly StatusCodeHttpResult Status206PartialContent = new StatusCodeHttpResult(StatusCodes.Status206PartialContent); + private static readonly StatusCodeHttpResult Status207MultiStatus = new StatusCodeHttpResult(StatusCodes.Status207MultiStatus); + private static readonly StatusCodeHttpResult Status208AlreadyReported = new StatusCodeHttpResult(StatusCodes.Status208AlreadyReported); + private static readonly StatusCodeHttpResult Status226IMUsed = new StatusCodeHttpResult(StatusCodes.Status226IMUsed); + private static readonly StatusCodeHttpResult Status300MultipleChoices = new StatusCodeHttpResult(StatusCodes.Status300MultipleChoices); + private static readonly StatusCodeHttpResult Status301MovedPermanently = new StatusCodeHttpResult(StatusCodes.Status301MovedPermanently); + private static readonly StatusCodeHttpResult Status302Found = new StatusCodeHttpResult(StatusCodes.Status302Found); + private static readonly StatusCodeHttpResult Status303SeeOther = new StatusCodeHttpResult(StatusCodes.Status303SeeOther); + private static readonly StatusCodeHttpResult Status304NotModified = new StatusCodeHttpResult(StatusCodes.Status304NotModified); + private static readonly StatusCodeHttpResult Status305UseProxy = new StatusCodeHttpResult(StatusCodes.Status305UseProxy); + private static readonly StatusCodeHttpResult Status306SwitchProxy = new StatusCodeHttpResult(StatusCodes.Status306SwitchProxy); + private static readonly StatusCodeHttpResult Status307TemporaryRedirect = new StatusCodeHttpResult(StatusCodes.Status307TemporaryRedirect); + private static readonly StatusCodeHttpResult Status308PermanentRedirect = new StatusCodeHttpResult(StatusCodes.Status308PermanentRedirect); + private static readonly StatusCodeHttpResult Status400BadRequest = new StatusCodeHttpResult(StatusCodes.Status400BadRequest); + private static readonly StatusCodeHttpResult Status401Unauthorized = new StatusCodeHttpResult(StatusCodes.Status401Unauthorized); + private static readonly StatusCodeHttpResult Status402PaymentRequired = new StatusCodeHttpResult(StatusCodes.Status402PaymentRequired); + private static readonly StatusCodeHttpResult Status403Forbidden = new StatusCodeHttpResult(StatusCodes.Status403Forbidden); + private static readonly StatusCodeHttpResult Status404NotFound = new StatusCodeHttpResult(StatusCodes.Status404NotFound); + private static readonly StatusCodeHttpResult Status405MethodNotAllowed = new StatusCodeHttpResult(StatusCodes.Status405MethodNotAllowed); + private static readonly StatusCodeHttpResult Status406NotAcceptable = new StatusCodeHttpResult(StatusCodes.Status406NotAcceptable); + private static readonly StatusCodeHttpResult Status407ProxyAuthenticationRequired = new StatusCodeHttpResult(StatusCodes.Status407ProxyAuthenticationRequired); + private static readonly StatusCodeHttpResult Status408RequestTimeout = new StatusCodeHttpResult(StatusCodes.Status408RequestTimeout); + private static readonly StatusCodeHttpResult Status409Conflict = new StatusCodeHttpResult(StatusCodes.Status409Conflict); + private static readonly StatusCodeHttpResult Status410Gone = new StatusCodeHttpResult(StatusCodes.Status410Gone); + private static readonly StatusCodeHttpResult Status411LengthRequired = new StatusCodeHttpResult(StatusCodes.Status411LengthRequired); + private static readonly StatusCodeHttpResult Status412PreconditionFailed = new StatusCodeHttpResult(StatusCodes.Status412PreconditionFailed); + private static readonly StatusCodeHttpResult Status413RequestEntityTooLarge = new StatusCodeHttpResult(StatusCodes.Status413RequestEntityTooLarge); + private static readonly StatusCodeHttpResult Status414RequestUriTooLong = new StatusCodeHttpResult(StatusCodes.Status414RequestUriTooLong); + private static readonly StatusCodeHttpResult Status415UnsupportedMediaType = new StatusCodeHttpResult(StatusCodes.Status415UnsupportedMediaType); + private static readonly StatusCodeHttpResult Status416RequestedRangeNotSatisfiable = new StatusCodeHttpResult(StatusCodes.Status416RequestedRangeNotSatisfiable); + private static readonly StatusCodeHttpResult Status417ExpectationFailed = new StatusCodeHttpResult(StatusCodes.Status417ExpectationFailed); + private static readonly StatusCodeHttpResult Status418ImATeapot = new StatusCodeHttpResult(StatusCodes.Status418ImATeapot); + private static readonly StatusCodeHttpResult Status419AuthenticationTimeout = new StatusCodeHttpResult(StatusCodes.Status419AuthenticationTimeout); + private static readonly StatusCodeHttpResult Status421MisdirectedRequest = new StatusCodeHttpResult(StatusCodes.Status421MisdirectedRequest); + private static readonly StatusCodeHttpResult Status422UnprocessableEntity = new StatusCodeHttpResult(StatusCodes.Status422UnprocessableEntity); + private static readonly StatusCodeHttpResult Status423Locked = new StatusCodeHttpResult(StatusCodes.Status423Locked); + private static readonly StatusCodeHttpResult Status424FailedDependency = new StatusCodeHttpResult(StatusCodes.Status424FailedDependency); + private static readonly StatusCodeHttpResult Status426UpgradeRequired = new StatusCodeHttpResult(StatusCodes.Status426UpgradeRequired); + private static readonly StatusCodeHttpResult Status428PreconditionRequired = new StatusCodeHttpResult(StatusCodes.Status428PreconditionRequired); + private static readonly StatusCodeHttpResult Status429TooManyRequests = new StatusCodeHttpResult(StatusCodes.Status429TooManyRequests); + private static readonly StatusCodeHttpResult Status431RequestHeaderFieldsTooLarge = new StatusCodeHttpResult(StatusCodes.Status431RequestHeaderFieldsTooLarge); + private static readonly StatusCodeHttpResult Status451UnavailableForLegalReasons = new StatusCodeHttpResult(StatusCodes.Status451UnavailableForLegalReasons); + private static readonly StatusCodeHttpResult Status500InternalServerError = new StatusCodeHttpResult(StatusCodes.Status500InternalServerError); + private static readonly StatusCodeHttpResult Status501NotImplemented = new StatusCodeHttpResult(StatusCodes.Status501NotImplemented); + private static readonly StatusCodeHttpResult Status502BadGateway = new StatusCodeHttpResult(StatusCodes.Status502BadGateway); + private static readonly StatusCodeHttpResult Status503ServiceUnavailable = new StatusCodeHttpResult(StatusCodes.Status503ServiceUnavailable); + private static readonly StatusCodeHttpResult Status504GatewayTimeout = new StatusCodeHttpResult(StatusCodes.Status504GatewayTimeout); + private static readonly StatusCodeHttpResult Status505HttpVersionNotsupported = new StatusCodeHttpResult(StatusCodes.Status505HttpVersionNotsupported); + private static readonly StatusCodeHttpResult Status506VariantAlsoNegotiates = new StatusCodeHttpResult(StatusCodes.Status506VariantAlsoNegotiates); + private static readonly StatusCodeHttpResult Status507InsufficientStorage = new StatusCodeHttpResult(StatusCodes.Status507InsufficientStorage); + private static readonly StatusCodeHttpResult Status508LoopDetected = new StatusCodeHttpResult(StatusCodes.Status508LoopDetected); + private static readonly StatusCodeHttpResult Status510NotExtended = new StatusCodeHttpResult(StatusCodes.Status510NotExtended); + private static readonly StatusCodeHttpResult Status511NetworkAuthenticationRequired = new StatusCodeHttpResult(StatusCodes.Status511NetworkAuthenticationRequired); + + internal static StatusCodeHttpResult StatusCode(int statusCode) + { + return statusCode switch + { + StatusCodes.Status100Continue => Status100Continue, + StatusCodes.Status101SwitchingProtocols => Status101SwitchingProtocols, + StatusCodes.Status102Processing => Status102Processing, + StatusCodes.Status200OK => Status200OK, + StatusCodes.Status201Created => Status201Created, + StatusCodes.Status202Accepted => Status202Accepted, + StatusCodes.Status203NonAuthoritative => Status203NonAuthoritative, + StatusCodes.Status204NoContent => Status204NoContent, + StatusCodes.Status205ResetContent => Status205ResetContent, + StatusCodes.Status206PartialContent => Status206PartialContent, + StatusCodes.Status207MultiStatus => Status207MultiStatus, + StatusCodes.Status208AlreadyReported => Status208AlreadyReported, + StatusCodes.Status226IMUsed => Status226IMUsed, + StatusCodes.Status300MultipleChoices => Status300MultipleChoices, + StatusCodes.Status301MovedPermanently => Status301MovedPermanently, + StatusCodes.Status302Found => Status302Found, + StatusCodes.Status303SeeOther => Status303SeeOther, + StatusCodes.Status304NotModified => Status304NotModified, + StatusCodes.Status305UseProxy => Status305UseProxy, + StatusCodes.Status306SwitchProxy => Status306SwitchProxy, + StatusCodes.Status307TemporaryRedirect => Status307TemporaryRedirect, + StatusCodes.Status308PermanentRedirect => Status308PermanentRedirect, + StatusCodes.Status400BadRequest => Status400BadRequest, + StatusCodes.Status401Unauthorized => Status401Unauthorized, + StatusCodes.Status402PaymentRequired => Status402PaymentRequired, + StatusCodes.Status403Forbidden => Status403Forbidden, + StatusCodes.Status404NotFound => Status404NotFound, + StatusCodes.Status405MethodNotAllowed => Status405MethodNotAllowed, + StatusCodes.Status406NotAcceptable => Status406NotAcceptable, + StatusCodes.Status407ProxyAuthenticationRequired => Status407ProxyAuthenticationRequired, + StatusCodes.Status408RequestTimeout => Status408RequestTimeout, + StatusCodes.Status409Conflict => Status409Conflict, + StatusCodes.Status410Gone => Status410Gone, + StatusCodes.Status411LengthRequired => Status411LengthRequired, + StatusCodes.Status412PreconditionFailed => Status412PreconditionFailed, + StatusCodes.Status413RequestEntityTooLarge => Status413RequestEntityTooLarge, + StatusCodes.Status414RequestUriTooLong => Status414RequestUriTooLong, + StatusCodes.Status415UnsupportedMediaType => Status415UnsupportedMediaType, + StatusCodes.Status416RequestedRangeNotSatisfiable => Status416RequestedRangeNotSatisfiable, + StatusCodes.Status417ExpectationFailed => Status417ExpectationFailed, + StatusCodes.Status418ImATeapot => Status418ImATeapot, + StatusCodes.Status419AuthenticationTimeout => Status419AuthenticationTimeout, + StatusCodes.Status421MisdirectedRequest => Status421MisdirectedRequest, + StatusCodes.Status422UnprocessableEntity => Status422UnprocessableEntity, + StatusCodes.Status423Locked => Status423Locked, + StatusCodes.Status424FailedDependency => Status424FailedDependency, + StatusCodes.Status426UpgradeRequired => Status426UpgradeRequired, + StatusCodes.Status428PreconditionRequired => Status428PreconditionRequired, + StatusCodes.Status429TooManyRequests => Status429TooManyRequests, + StatusCodes.Status431RequestHeaderFieldsTooLarge => Status431RequestHeaderFieldsTooLarge, + StatusCodes.Status451UnavailableForLegalReasons => Status451UnavailableForLegalReasons, + StatusCodes.Status500InternalServerError => Status500InternalServerError, + StatusCodes.Status501NotImplemented => Status501NotImplemented, + StatusCodes.Status502BadGateway => Status502BadGateway, + StatusCodes.Status503ServiceUnavailable => Status503ServiceUnavailable, + StatusCodes.Status504GatewayTimeout => Status504GatewayTimeout, + StatusCodes.Status505HttpVersionNotsupported => Status505HttpVersionNotsupported, + StatusCodes.Status506VariantAlsoNegotiates => Status506VariantAlsoNegotiates, + StatusCodes.Status507InsufficientStorage => Status507InsufficientStorage, + StatusCodes.Status508LoopDetected => Status508LoopDetected, + StatusCodes.Status510NotExtended => Status510NotExtended, + StatusCodes.Status511NetworkAuthenticationRequired => Status511NetworkAuthenticationRequired, + _ => new StatusCodeHttpResult(statusCode), + }; + } +} diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt new file mode 100644 index 000000000000..2ad1b0759c14 --- /dev/null +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -0,0 +1,98 @@ +<#@ template debug="true" hostspecific="true" language="C#" #> +<#@ assembly name="System.Core" #> +<#@ output extension=".cs" #> +<# + /// A collection of constants for + /// HTTP status codes. + var statusCodes = new[] + { + new { StatusCode = 100, Name = "100Continue"}, + new { StatusCode = 101, Name = "101SwitchingProtocols"}, + new { StatusCode = 102, Name = "102Processing"}, + new { StatusCode = 200, Name = "200OK"}, + new { StatusCode = 201, Name = "201Created"}, + new { StatusCode = 202, Name = "202Accepted"}, + new { StatusCode = 203, Name = "203NonAuthoritative"}, + new { StatusCode = 204, Name = "204NoContent"}, + new { StatusCode = 205, Name = "205ResetContent"}, + new { StatusCode = 206, Name = "206PartialContent"}, + new { StatusCode = 207, Name = "207MultiStatus"}, + new { StatusCode = 208, Name = "208AlreadyReported"}, + new { StatusCode = 226, Name = "226IMUsed"}, + new { StatusCode = 300, Name = "300MultipleChoices"}, + new { StatusCode = 301, Name = "301MovedPermanently"}, + new { StatusCode = 302, Name = "302Found"}, + new { StatusCode = 303, Name = "303SeeOther"}, + new { StatusCode = 304, Name = "304NotModified"}, + new { StatusCode = 305, Name = "305UseProxy"}, + new { StatusCode = 306, Name = "306SwitchProxy"}, + new { StatusCode = 307, Name = "307TemporaryRedirect"}, + new { StatusCode = 308, Name = "308PermanentRedirect"}, + new { StatusCode = 400, Name = "400BadRequest"}, + new { StatusCode = 401, Name = "401Unauthorized"}, + new { StatusCode = 402, Name = "402PaymentRequired"}, + new { StatusCode = 403, Name = "403Forbidden"}, + new { StatusCode = 404, Name = "404NotFound"}, + new { StatusCode = 405, Name = "405MethodNotAllowed"}, + new { StatusCode = 406, Name = "406NotAcceptable"}, + new { StatusCode = 407, Name = "407ProxyAuthenticationRequired"}, + new { StatusCode = 408, Name = "408RequestTimeout"}, + new { StatusCode = 409, Name = "409Conflict"}, + new { StatusCode = 410, Name = "410Gone"}, + new { StatusCode = 411, Name = "411LengthRequired"}, + new { StatusCode = 412, Name = "412PreconditionFailed"}, + new { StatusCode = 413, Name = "413RequestEntityTooLarge"}, + new { StatusCode = 414, Name = "414RequestUriTooLong"}, + new { StatusCode = 415, Name = "415UnsupportedMediaType"}, + new { StatusCode = 416, Name = "416RequestedRangeNotSatisfiable"}, + new { StatusCode = 417, Name = "417ExpectationFailed"}, + new { StatusCode = 418, Name = "418ImATeapot"}, + new { StatusCode = 419, Name = "419AuthenticationTimeout"}, + new { StatusCode = 421, Name = "421MisdirectedRequest"}, + new { StatusCode = 422, Name = "422UnprocessableEntity"}, + new { StatusCode = 423, Name = "423Locked"}, + new { StatusCode = 424, Name = "424FailedDependency"}, + new { StatusCode = 426, Name = "426UpgradeRequired"}, + new { StatusCode = 428, Name = "428PreconditionRequired"}, + new { StatusCode = 429, Name = "429TooManyRequests"}, + new { StatusCode = 431, Name = "431RequestHeaderFieldsTooLarge"}, + new { StatusCode = 451, Name = "451UnavailableForLegalReasons"}, + new { StatusCode = 500, Name = "500InternalServerError"}, + new { StatusCode = 501, Name = "501NotImplemented"}, + new { StatusCode = 502, Name = "502BadGateway"}, + new { StatusCode = 503, Name = "503ServiceUnavailable"}, + new { StatusCode = 504, Name = "504GatewayTimeout"}, + new { StatusCode = 505, Name = "505HttpVersionNotsupported"}, + new { StatusCode = 506, Name = "506VariantAlsoNegotiates"}, + new { StatusCode = 507, Name = "507InsufficientStorage"}, + new { StatusCode = 508, Name = "508LoopDetected"}, + new { StatusCode = 510, Name = "510NotExtended"}, + new { StatusCode = 511, Name = "511NetworkAuthenticationRequired"}, + }; +#> +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// + +namespace Microsoft.AspNetCore.Http; + +using System.CodeDom.Compiler; + +[GeneratedCode("TextTemplatingFileGenerator", "")] +internal static partial class ResultsCache +{ +<# foreach (var statusCode in statusCodes) { #> + private static readonly StatusCodeHttpResult Status<#= statusCode.Name #> = new StatusCodeHttpResult(StatusCodes.Status<#= statusCode.Name #>); +<# } #> + + internal static StatusCodeHttpResult StatusCode(int statusCode) + { + return statusCode switch + { +<# foreach (var statusCode in statusCodes) { #> + StatusCodes.Status<#= statusCode.Name #> => Status<#= statusCode.Name #>, +<# } #> + _ => new StatusCodeHttpResult(statusCode), + }; + } +} diff --git a/src/Http/Http.Results/src/ResultsCache.cs b/src/Http/Http.Results/src/ResultsCache.cs new file mode 100644 index 000000000000..0137f6b699d4 --- /dev/null +++ b/src/Http/Http.Results/src/ResultsCache.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Http; + +internal static partial class ResultsCache +{ + public static NotFoundObjectHttpResult NotFound { get; } = new(); + public static UnauthorizedHttpResult Unauthorized { get; } = new(); + public static BadRequestObjectHttpResult BadRequest { get; } = new(); + public static ConflictObjectHttpResult Conflict { get; } = new(); + public static NoContentHttpResult NoContent { get; } = new(); + public static OkObjectHttpResult Ok { get; } = new(); + public static UnprocessableEntityObjectHttpResult UnprocessableEntity { get; } = new(); +} From 7045da0135cad7f4a658702c4c8662a7abd3b821 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Tue, 29 Mar 2022 13:16:01 -0700 Subject: [PATCH 02/18] removing generated code --- .../src/ResultsCache.StatusCodes.cs | 144 ------------------ src/Http/Http.Results/src/ResultsCache.cs | 10 +- 2 files changed, 5 insertions(+), 149 deletions(-) delete mode 100644 src/Http/Http.Results/src/ResultsCache.StatusCodes.cs diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs deleted file mode 100644 index 02045accc4b0..000000000000 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// - -namespace Microsoft.AspNetCore.Http; - -using System.CodeDom.Compiler; - -[GeneratedCode("TextTemplatingFileGenerator", "")] -internal static partial class ResultsCache -{ - private static readonly StatusCodeHttpResult Status100Continue = new StatusCodeHttpResult(StatusCodes.Status100Continue); - private static readonly StatusCodeHttpResult Status101SwitchingProtocols = new StatusCodeHttpResult(StatusCodes.Status101SwitchingProtocols); - private static readonly StatusCodeHttpResult Status102Processing = new StatusCodeHttpResult(StatusCodes.Status102Processing); - private static readonly StatusCodeHttpResult Status200OK = new StatusCodeHttpResult(StatusCodes.Status200OK); - private static readonly StatusCodeHttpResult Status201Created = new StatusCodeHttpResult(StatusCodes.Status201Created); - private static readonly StatusCodeHttpResult Status202Accepted = new StatusCodeHttpResult(StatusCodes.Status202Accepted); - private static readonly StatusCodeHttpResult Status203NonAuthoritative = new StatusCodeHttpResult(StatusCodes.Status203NonAuthoritative); - private static readonly StatusCodeHttpResult Status204NoContent = new StatusCodeHttpResult(StatusCodes.Status204NoContent); - private static readonly StatusCodeHttpResult Status205ResetContent = new StatusCodeHttpResult(StatusCodes.Status205ResetContent); - private static readonly StatusCodeHttpResult Status206PartialContent = new StatusCodeHttpResult(StatusCodes.Status206PartialContent); - private static readonly StatusCodeHttpResult Status207MultiStatus = new StatusCodeHttpResult(StatusCodes.Status207MultiStatus); - private static readonly StatusCodeHttpResult Status208AlreadyReported = new StatusCodeHttpResult(StatusCodes.Status208AlreadyReported); - private static readonly StatusCodeHttpResult Status226IMUsed = new StatusCodeHttpResult(StatusCodes.Status226IMUsed); - private static readonly StatusCodeHttpResult Status300MultipleChoices = new StatusCodeHttpResult(StatusCodes.Status300MultipleChoices); - private static readonly StatusCodeHttpResult Status301MovedPermanently = new StatusCodeHttpResult(StatusCodes.Status301MovedPermanently); - private static readonly StatusCodeHttpResult Status302Found = new StatusCodeHttpResult(StatusCodes.Status302Found); - private static readonly StatusCodeHttpResult Status303SeeOther = new StatusCodeHttpResult(StatusCodes.Status303SeeOther); - private static readonly StatusCodeHttpResult Status304NotModified = new StatusCodeHttpResult(StatusCodes.Status304NotModified); - private static readonly StatusCodeHttpResult Status305UseProxy = new StatusCodeHttpResult(StatusCodes.Status305UseProxy); - private static readonly StatusCodeHttpResult Status306SwitchProxy = new StatusCodeHttpResult(StatusCodes.Status306SwitchProxy); - private static readonly StatusCodeHttpResult Status307TemporaryRedirect = new StatusCodeHttpResult(StatusCodes.Status307TemporaryRedirect); - private static readonly StatusCodeHttpResult Status308PermanentRedirect = new StatusCodeHttpResult(StatusCodes.Status308PermanentRedirect); - private static readonly StatusCodeHttpResult Status400BadRequest = new StatusCodeHttpResult(StatusCodes.Status400BadRequest); - private static readonly StatusCodeHttpResult Status401Unauthorized = new StatusCodeHttpResult(StatusCodes.Status401Unauthorized); - private static readonly StatusCodeHttpResult Status402PaymentRequired = new StatusCodeHttpResult(StatusCodes.Status402PaymentRequired); - private static readonly StatusCodeHttpResult Status403Forbidden = new StatusCodeHttpResult(StatusCodes.Status403Forbidden); - private static readonly StatusCodeHttpResult Status404NotFound = new StatusCodeHttpResult(StatusCodes.Status404NotFound); - private static readonly StatusCodeHttpResult Status405MethodNotAllowed = new StatusCodeHttpResult(StatusCodes.Status405MethodNotAllowed); - private static readonly StatusCodeHttpResult Status406NotAcceptable = new StatusCodeHttpResult(StatusCodes.Status406NotAcceptable); - private static readonly StatusCodeHttpResult Status407ProxyAuthenticationRequired = new StatusCodeHttpResult(StatusCodes.Status407ProxyAuthenticationRequired); - private static readonly StatusCodeHttpResult Status408RequestTimeout = new StatusCodeHttpResult(StatusCodes.Status408RequestTimeout); - private static readonly StatusCodeHttpResult Status409Conflict = new StatusCodeHttpResult(StatusCodes.Status409Conflict); - private static readonly StatusCodeHttpResult Status410Gone = new StatusCodeHttpResult(StatusCodes.Status410Gone); - private static readonly StatusCodeHttpResult Status411LengthRequired = new StatusCodeHttpResult(StatusCodes.Status411LengthRequired); - private static readonly StatusCodeHttpResult Status412PreconditionFailed = new StatusCodeHttpResult(StatusCodes.Status412PreconditionFailed); - private static readonly StatusCodeHttpResult Status413RequestEntityTooLarge = new StatusCodeHttpResult(StatusCodes.Status413RequestEntityTooLarge); - private static readonly StatusCodeHttpResult Status414RequestUriTooLong = new StatusCodeHttpResult(StatusCodes.Status414RequestUriTooLong); - private static readonly StatusCodeHttpResult Status415UnsupportedMediaType = new StatusCodeHttpResult(StatusCodes.Status415UnsupportedMediaType); - private static readonly StatusCodeHttpResult Status416RequestedRangeNotSatisfiable = new StatusCodeHttpResult(StatusCodes.Status416RequestedRangeNotSatisfiable); - private static readonly StatusCodeHttpResult Status417ExpectationFailed = new StatusCodeHttpResult(StatusCodes.Status417ExpectationFailed); - private static readonly StatusCodeHttpResult Status418ImATeapot = new StatusCodeHttpResult(StatusCodes.Status418ImATeapot); - private static readonly StatusCodeHttpResult Status419AuthenticationTimeout = new StatusCodeHttpResult(StatusCodes.Status419AuthenticationTimeout); - private static readonly StatusCodeHttpResult Status421MisdirectedRequest = new StatusCodeHttpResult(StatusCodes.Status421MisdirectedRequest); - private static readonly StatusCodeHttpResult Status422UnprocessableEntity = new StatusCodeHttpResult(StatusCodes.Status422UnprocessableEntity); - private static readonly StatusCodeHttpResult Status423Locked = new StatusCodeHttpResult(StatusCodes.Status423Locked); - private static readonly StatusCodeHttpResult Status424FailedDependency = new StatusCodeHttpResult(StatusCodes.Status424FailedDependency); - private static readonly StatusCodeHttpResult Status426UpgradeRequired = new StatusCodeHttpResult(StatusCodes.Status426UpgradeRequired); - private static readonly StatusCodeHttpResult Status428PreconditionRequired = new StatusCodeHttpResult(StatusCodes.Status428PreconditionRequired); - private static readonly StatusCodeHttpResult Status429TooManyRequests = new StatusCodeHttpResult(StatusCodes.Status429TooManyRequests); - private static readonly StatusCodeHttpResult Status431RequestHeaderFieldsTooLarge = new StatusCodeHttpResult(StatusCodes.Status431RequestHeaderFieldsTooLarge); - private static readonly StatusCodeHttpResult Status451UnavailableForLegalReasons = new StatusCodeHttpResult(StatusCodes.Status451UnavailableForLegalReasons); - private static readonly StatusCodeHttpResult Status500InternalServerError = new StatusCodeHttpResult(StatusCodes.Status500InternalServerError); - private static readonly StatusCodeHttpResult Status501NotImplemented = new StatusCodeHttpResult(StatusCodes.Status501NotImplemented); - private static readonly StatusCodeHttpResult Status502BadGateway = new StatusCodeHttpResult(StatusCodes.Status502BadGateway); - private static readonly StatusCodeHttpResult Status503ServiceUnavailable = new StatusCodeHttpResult(StatusCodes.Status503ServiceUnavailable); - private static readonly StatusCodeHttpResult Status504GatewayTimeout = new StatusCodeHttpResult(StatusCodes.Status504GatewayTimeout); - private static readonly StatusCodeHttpResult Status505HttpVersionNotsupported = new StatusCodeHttpResult(StatusCodes.Status505HttpVersionNotsupported); - private static readonly StatusCodeHttpResult Status506VariantAlsoNegotiates = new StatusCodeHttpResult(StatusCodes.Status506VariantAlsoNegotiates); - private static readonly StatusCodeHttpResult Status507InsufficientStorage = new StatusCodeHttpResult(StatusCodes.Status507InsufficientStorage); - private static readonly StatusCodeHttpResult Status508LoopDetected = new StatusCodeHttpResult(StatusCodes.Status508LoopDetected); - private static readonly StatusCodeHttpResult Status510NotExtended = new StatusCodeHttpResult(StatusCodes.Status510NotExtended); - private static readonly StatusCodeHttpResult Status511NetworkAuthenticationRequired = new StatusCodeHttpResult(StatusCodes.Status511NetworkAuthenticationRequired); - - internal static StatusCodeHttpResult StatusCode(int statusCode) - { - return statusCode switch - { - StatusCodes.Status100Continue => Status100Continue, - StatusCodes.Status101SwitchingProtocols => Status101SwitchingProtocols, - StatusCodes.Status102Processing => Status102Processing, - StatusCodes.Status200OK => Status200OK, - StatusCodes.Status201Created => Status201Created, - StatusCodes.Status202Accepted => Status202Accepted, - StatusCodes.Status203NonAuthoritative => Status203NonAuthoritative, - StatusCodes.Status204NoContent => Status204NoContent, - StatusCodes.Status205ResetContent => Status205ResetContent, - StatusCodes.Status206PartialContent => Status206PartialContent, - StatusCodes.Status207MultiStatus => Status207MultiStatus, - StatusCodes.Status208AlreadyReported => Status208AlreadyReported, - StatusCodes.Status226IMUsed => Status226IMUsed, - StatusCodes.Status300MultipleChoices => Status300MultipleChoices, - StatusCodes.Status301MovedPermanently => Status301MovedPermanently, - StatusCodes.Status302Found => Status302Found, - StatusCodes.Status303SeeOther => Status303SeeOther, - StatusCodes.Status304NotModified => Status304NotModified, - StatusCodes.Status305UseProxy => Status305UseProxy, - StatusCodes.Status306SwitchProxy => Status306SwitchProxy, - StatusCodes.Status307TemporaryRedirect => Status307TemporaryRedirect, - StatusCodes.Status308PermanentRedirect => Status308PermanentRedirect, - StatusCodes.Status400BadRequest => Status400BadRequest, - StatusCodes.Status401Unauthorized => Status401Unauthorized, - StatusCodes.Status402PaymentRequired => Status402PaymentRequired, - StatusCodes.Status403Forbidden => Status403Forbidden, - StatusCodes.Status404NotFound => Status404NotFound, - StatusCodes.Status405MethodNotAllowed => Status405MethodNotAllowed, - StatusCodes.Status406NotAcceptable => Status406NotAcceptable, - StatusCodes.Status407ProxyAuthenticationRequired => Status407ProxyAuthenticationRequired, - StatusCodes.Status408RequestTimeout => Status408RequestTimeout, - StatusCodes.Status409Conflict => Status409Conflict, - StatusCodes.Status410Gone => Status410Gone, - StatusCodes.Status411LengthRequired => Status411LengthRequired, - StatusCodes.Status412PreconditionFailed => Status412PreconditionFailed, - StatusCodes.Status413RequestEntityTooLarge => Status413RequestEntityTooLarge, - StatusCodes.Status414RequestUriTooLong => Status414RequestUriTooLong, - StatusCodes.Status415UnsupportedMediaType => Status415UnsupportedMediaType, - StatusCodes.Status416RequestedRangeNotSatisfiable => Status416RequestedRangeNotSatisfiable, - StatusCodes.Status417ExpectationFailed => Status417ExpectationFailed, - StatusCodes.Status418ImATeapot => Status418ImATeapot, - StatusCodes.Status419AuthenticationTimeout => Status419AuthenticationTimeout, - StatusCodes.Status421MisdirectedRequest => Status421MisdirectedRequest, - StatusCodes.Status422UnprocessableEntity => Status422UnprocessableEntity, - StatusCodes.Status423Locked => Status423Locked, - StatusCodes.Status424FailedDependency => Status424FailedDependency, - StatusCodes.Status426UpgradeRequired => Status426UpgradeRequired, - StatusCodes.Status428PreconditionRequired => Status428PreconditionRequired, - StatusCodes.Status429TooManyRequests => Status429TooManyRequests, - StatusCodes.Status431RequestHeaderFieldsTooLarge => Status431RequestHeaderFieldsTooLarge, - StatusCodes.Status451UnavailableForLegalReasons => Status451UnavailableForLegalReasons, - StatusCodes.Status500InternalServerError => Status500InternalServerError, - StatusCodes.Status501NotImplemented => Status501NotImplemented, - StatusCodes.Status502BadGateway => Status502BadGateway, - StatusCodes.Status503ServiceUnavailable => Status503ServiceUnavailable, - StatusCodes.Status504GatewayTimeout => Status504GatewayTimeout, - StatusCodes.Status505HttpVersionNotsupported => Status505HttpVersionNotsupported, - StatusCodes.Status506VariantAlsoNegotiates => Status506VariantAlsoNegotiates, - StatusCodes.Status507InsufficientStorage => Status507InsufficientStorage, - StatusCodes.Status508LoopDetected => Status508LoopDetected, - StatusCodes.Status510NotExtended => Status510NotExtended, - StatusCodes.Status511NetworkAuthenticationRequired => Status511NetworkAuthenticationRequired, - _ => new StatusCodeHttpResult(statusCode), - }; - } -} diff --git a/src/Http/Http.Results/src/ResultsCache.cs b/src/Http/Http.Results/src/ResultsCache.cs index 0137f6b699d4..dcdcaf092fb0 100644 --- a/src/Http/Http.Results/src/ResultsCache.cs +++ b/src/Http/Http.Results/src/ResultsCache.cs @@ -5,11 +5,11 @@ namespace Microsoft.AspNetCore.Http; internal static partial class ResultsCache { - public static NotFoundObjectHttpResult NotFound { get; } = new(); + public static NotFoundObjectHttpResult NotFound { get; } = new(null); public static UnauthorizedHttpResult Unauthorized { get; } = new(); - public static BadRequestObjectHttpResult BadRequest { get; } = new(); - public static ConflictObjectHttpResult Conflict { get; } = new(); + public static BadRequestObjectHttpResult BadRequest { get; } = new(null); + public static ConflictObjectHttpResult Conflict { get; } = new(null); public static NoContentHttpResult NoContent { get; } = new(); - public static OkObjectHttpResult Ok { get; } = new(); - public static UnprocessableEntityObjectHttpResult UnprocessableEntity { get; } = new(); + public static OkObjectHttpResult Ok { get; } = new(null); + public static UnprocessableEntityObjectHttpResult UnprocessableEntity { get; } = new(null); } From ef57ac4a545ef8f619e0837a427feb085332490b Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Tue, 29 Mar 2022 13:31:15 -0700 Subject: [PATCH 03/18] Updating files --- .../Microsoft.AspNetCore.Http.Results.csproj | 11 ++ src/Http/Http.Results/src/Results.cs | 2 +- .../src/ResultsCache.StatusCodes.cs | 144 ++++++++++++++++++ .../src/ResultsCache.StatusCodes.tt | 2 +- 4 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 src/Http/Http.Results/src/ResultsCache.StatusCodes.cs diff --git a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj index cfa2eb2e0da9..b6303146012c 100644 --- a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj +++ b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj @@ -28,4 +28,15 @@ + + + TextTemplatingFileGenerator + ResultsCache.StatusCodes.cs + + + + + + + diff --git a/src/Http/Http.Results/src/Results.cs b/src/Http/Http.Results/src/Results.cs index 75759038a198..35187a07d435 100644 --- a/src/Http/Http.Results/src/Results.cs +++ b/src/Http/Http.Results/src/Results.cs @@ -705,7 +705,7 @@ public static IResult AcceptedAtRoute(string? routeName = null, object? routeVal /// /// Produces an empty result response, that when executed will do nothing. /// - public static IResult Empty { get; } = new EmptyHttpResult(); + public static IResult Empty { get; } = EmptyHttpResult.Instance; /// /// Provides a container for external libraries to extend diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs new file mode 100644 index 000000000000..b699bbb37616 --- /dev/null +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -0,0 +1,144 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// + +namespace Microsoft.AspNetCore.Http; + +using System.CodeDom.Compiler; + +[GeneratedCode("TextTemplatingFileGenerator", "")] +internal static partial class ResultsCache +{ + private static readonly StatusCodeHttpResult Status100Continue = new(StatusCodes.Status100Continue); + private static readonly StatusCodeHttpResult Status101SwitchingProtocols = new(StatusCodes.Status101SwitchingProtocols); + private static readonly StatusCodeHttpResult Status102Processing = new(StatusCodes.Status102Processing); + private static readonly StatusCodeHttpResult Status200OK = new(StatusCodes.Status200OK); + private static readonly StatusCodeHttpResult Status201Created = new(StatusCodes.Status201Created); + private static readonly StatusCodeHttpResult Status202Accepted = new(StatusCodes.Status202Accepted); + private static readonly StatusCodeHttpResult Status203NonAuthoritative = new(StatusCodes.Status203NonAuthoritative); + private static readonly StatusCodeHttpResult Status204NoContent = new(StatusCodes.Status204NoContent); + private static readonly StatusCodeHttpResult Status205ResetContent = new(StatusCodes.Status205ResetContent); + private static readonly StatusCodeHttpResult Status206PartialContent = new(StatusCodes.Status206PartialContent); + private static readonly StatusCodeHttpResult Status207MultiStatus = new(StatusCodes.Status207MultiStatus); + private static readonly StatusCodeHttpResult Status208AlreadyReported = new(StatusCodes.Status208AlreadyReported); + private static readonly StatusCodeHttpResult Status226IMUsed = new(StatusCodes.Status226IMUsed); + private static readonly StatusCodeHttpResult Status300MultipleChoices = new(StatusCodes.Status300MultipleChoices); + private static readonly StatusCodeHttpResult Status301MovedPermanently = new(StatusCodes.Status301MovedPermanently); + private static readonly StatusCodeHttpResult Status302Found = new(StatusCodes.Status302Found); + private static readonly StatusCodeHttpResult Status303SeeOther = new(StatusCodes.Status303SeeOther); + private static readonly StatusCodeHttpResult Status304NotModified = new(StatusCodes.Status304NotModified); + private static readonly StatusCodeHttpResult Status305UseProxy = new(StatusCodes.Status305UseProxy); + private static readonly StatusCodeHttpResult Status306SwitchProxy = new(StatusCodes.Status306SwitchProxy); + private static readonly StatusCodeHttpResult Status307TemporaryRedirect = new(StatusCodes.Status307TemporaryRedirect); + private static readonly StatusCodeHttpResult Status308PermanentRedirect = new(StatusCodes.Status308PermanentRedirect); + private static readonly StatusCodeHttpResult Status400BadRequest = new(StatusCodes.Status400BadRequest); + private static readonly StatusCodeHttpResult Status401Unauthorized = new(StatusCodes.Status401Unauthorized); + private static readonly StatusCodeHttpResult Status402PaymentRequired = new(StatusCodes.Status402PaymentRequired); + private static readonly StatusCodeHttpResult Status403Forbidden = new(StatusCodes.Status403Forbidden); + private static readonly StatusCodeHttpResult Status404NotFound = new(StatusCodes.Status404NotFound); + private static readonly StatusCodeHttpResult Status405MethodNotAllowed = new(StatusCodes.Status405MethodNotAllowed); + private static readonly StatusCodeHttpResult Status406NotAcceptable = new(StatusCodes.Status406NotAcceptable); + private static readonly StatusCodeHttpResult Status407ProxyAuthenticationRequired = new(StatusCodes.Status407ProxyAuthenticationRequired); + private static readonly StatusCodeHttpResult Status408RequestTimeout = new(StatusCodes.Status408RequestTimeout); + private static readonly StatusCodeHttpResult Status409Conflict = new(StatusCodes.Status409Conflict); + private static readonly StatusCodeHttpResult Status410Gone = new(StatusCodes.Status410Gone); + private static readonly StatusCodeHttpResult Status411LengthRequired = new(StatusCodes.Status411LengthRequired); + private static readonly StatusCodeHttpResult Status412PreconditionFailed = new(StatusCodes.Status412PreconditionFailed); + private static readonly StatusCodeHttpResult Status413RequestEntityTooLarge = new(StatusCodes.Status413RequestEntityTooLarge); + private static readonly StatusCodeHttpResult Status414RequestUriTooLong = new(StatusCodes.Status414RequestUriTooLong); + private static readonly StatusCodeHttpResult Status415UnsupportedMediaType = new(StatusCodes.Status415UnsupportedMediaType); + private static readonly StatusCodeHttpResult Status416RequestedRangeNotSatisfiable = new(StatusCodes.Status416RequestedRangeNotSatisfiable); + private static readonly StatusCodeHttpResult Status417ExpectationFailed = new(StatusCodes.Status417ExpectationFailed); + private static readonly StatusCodeHttpResult Status418ImATeapot = new(StatusCodes.Status418ImATeapot); + private static readonly StatusCodeHttpResult Status419AuthenticationTimeout = new(StatusCodes.Status419AuthenticationTimeout); + private static readonly StatusCodeHttpResult Status421MisdirectedRequest = new(StatusCodes.Status421MisdirectedRequest); + private static readonly StatusCodeHttpResult Status422UnprocessableEntity = new(StatusCodes.Status422UnprocessableEntity); + private static readonly StatusCodeHttpResult Status423Locked = new(StatusCodes.Status423Locked); + private static readonly StatusCodeHttpResult Status424FailedDependency = new(StatusCodes.Status424FailedDependency); + private static readonly StatusCodeHttpResult Status426UpgradeRequired = new(StatusCodes.Status426UpgradeRequired); + private static readonly StatusCodeHttpResult Status428PreconditionRequired = new(StatusCodes.Status428PreconditionRequired); + private static readonly StatusCodeHttpResult Status429TooManyRequests = new(StatusCodes.Status429TooManyRequests); + private static readonly StatusCodeHttpResult Status431RequestHeaderFieldsTooLarge = new(StatusCodes.Status431RequestHeaderFieldsTooLarge); + private static readonly StatusCodeHttpResult Status451UnavailableForLegalReasons = new(StatusCodes.Status451UnavailableForLegalReasons); + private static readonly StatusCodeHttpResult Status500InternalServerError = new(StatusCodes.Status500InternalServerError); + private static readonly StatusCodeHttpResult Status501NotImplemented = new(StatusCodes.Status501NotImplemented); + private static readonly StatusCodeHttpResult Status502BadGateway = new(StatusCodes.Status502BadGateway); + private static readonly StatusCodeHttpResult Status503ServiceUnavailable = new(StatusCodes.Status503ServiceUnavailable); + private static readonly StatusCodeHttpResult Status504GatewayTimeout = new(StatusCodes.Status504GatewayTimeout); + private static readonly StatusCodeHttpResult Status505HttpVersionNotsupported = new(StatusCodes.Status505HttpVersionNotsupported); + private static readonly StatusCodeHttpResult Status506VariantAlsoNegotiates = new(StatusCodes.Status506VariantAlsoNegotiates); + private static readonly StatusCodeHttpResult Status507InsufficientStorage = new(StatusCodes.Status507InsufficientStorage); + private static readonly StatusCodeHttpResult Status508LoopDetected = new(StatusCodes.Status508LoopDetected); + private static readonly StatusCodeHttpResult Status510NotExtended = new(StatusCodes.Status510NotExtended); + private static readonly StatusCodeHttpResult Status511NetworkAuthenticationRequired = new(StatusCodes.Status511NetworkAuthenticationRequired); + + internal static StatusCodeHttpResult StatusCode(int statusCode) + { + return statusCode switch + { + StatusCodes.Status100Continue => Status100Continue, + StatusCodes.Status101SwitchingProtocols => Status101SwitchingProtocols, + StatusCodes.Status102Processing => Status102Processing, + StatusCodes.Status200OK => Status200OK, + StatusCodes.Status201Created => Status201Created, + StatusCodes.Status202Accepted => Status202Accepted, + StatusCodes.Status203NonAuthoritative => Status203NonAuthoritative, + StatusCodes.Status204NoContent => Status204NoContent, + StatusCodes.Status205ResetContent => Status205ResetContent, + StatusCodes.Status206PartialContent => Status206PartialContent, + StatusCodes.Status207MultiStatus => Status207MultiStatus, + StatusCodes.Status208AlreadyReported => Status208AlreadyReported, + StatusCodes.Status226IMUsed => Status226IMUsed, + StatusCodes.Status300MultipleChoices => Status300MultipleChoices, + StatusCodes.Status301MovedPermanently => Status301MovedPermanently, + StatusCodes.Status302Found => Status302Found, + StatusCodes.Status303SeeOther => Status303SeeOther, + StatusCodes.Status304NotModified => Status304NotModified, + StatusCodes.Status305UseProxy => Status305UseProxy, + StatusCodes.Status306SwitchProxy => Status306SwitchProxy, + StatusCodes.Status307TemporaryRedirect => Status307TemporaryRedirect, + StatusCodes.Status308PermanentRedirect => Status308PermanentRedirect, + StatusCodes.Status400BadRequest => Status400BadRequest, + StatusCodes.Status401Unauthorized => Status401Unauthorized, + StatusCodes.Status402PaymentRequired => Status402PaymentRequired, + StatusCodes.Status403Forbidden => Status403Forbidden, + StatusCodes.Status404NotFound => Status404NotFound, + StatusCodes.Status405MethodNotAllowed => Status405MethodNotAllowed, + StatusCodes.Status406NotAcceptable => Status406NotAcceptable, + StatusCodes.Status407ProxyAuthenticationRequired => Status407ProxyAuthenticationRequired, + StatusCodes.Status408RequestTimeout => Status408RequestTimeout, + StatusCodes.Status409Conflict => Status409Conflict, + StatusCodes.Status410Gone => Status410Gone, + StatusCodes.Status411LengthRequired => Status411LengthRequired, + StatusCodes.Status412PreconditionFailed => Status412PreconditionFailed, + StatusCodes.Status413RequestEntityTooLarge => Status413RequestEntityTooLarge, + StatusCodes.Status414RequestUriTooLong => Status414RequestUriTooLong, + StatusCodes.Status415UnsupportedMediaType => Status415UnsupportedMediaType, + StatusCodes.Status416RequestedRangeNotSatisfiable => Status416RequestedRangeNotSatisfiable, + StatusCodes.Status417ExpectationFailed => Status417ExpectationFailed, + StatusCodes.Status418ImATeapot => Status418ImATeapot, + StatusCodes.Status419AuthenticationTimeout => Status419AuthenticationTimeout, + StatusCodes.Status421MisdirectedRequest => Status421MisdirectedRequest, + StatusCodes.Status422UnprocessableEntity => Status422UnprocessableEntity, + StatusCodes.Status423Locked => Status423Locked, + StatusCodes.Status424FailedDependency => Status424FailedDependency, + StatusCodes.Status426UpgradeRequired => Status426UpgradeRequired, + StatusCodes.Status428PreconditionRequired => Status428PreconditionRequired, + StatusCodes.Status429TooManyRequests => Status429TooManyRequests, + StatusCodes.Status431RequestHeaderFieldsTooLarge => Status431RequestHeaderFieldsTooLarge, + StatusCodes.Status451UnavailableForLegalReasons => Status451UnavailableForLegalReasons, + StatusCodes.Status500InternalServerError => Status500InternalServerError, + StatusCodes.Status501NotImplemented => Status501NotImplemented, + StatusCodes.Status502BadGateway => Status502BadGateway, + StatusCodes.Status503ServiceUnavailable => Status503ServiceUnavailable, + StatusCodes.Status504GatewayTimeout => Status504GatewayTimeout, + StatusCodes.Status505HttpVersionNotsupported => Status505HttpVersionNotsupported, + StatusCodes.Status506VariantAlsoNegotiates => Status506VariantAlsoNegotiates, + StatusCodes.Status507InsufficientStorage => Status507InsufficientStorage, + StatusCodes.Status508LoopDetected => Status508LoopDetected, + StatusCodes.Status510NotExtended => Status510NotExtended, + StatusCodes.Status511NetworkAuthenticationRequired => Status511NetworkAuthenticationRequired, + _ => new StatusCodeHttpResult(statusCode), + }; + } +} diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 2ad1b0759c14..96f1ad381ae7 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -82,7 +82,7 @@ using System.CodeDom.Compiler; internal static partial class ResultsCache { <# foreach (var statusCode in statusCodes) { #> - private static readonly StatusCodeHttpResult Status<#= statusCode.Name #> = new StatusCodeHttpResult(StatusCodes.Status<#= statusCode.Name #>); + private static readonly StatusCodeHttpResult Status<#= statusCode.Name #> = new(StatusCodes.Status<#= statusCode.Name #>); <# } #> internal static StatusCodeHttpResult StatusCode(int statusCode) From 33797966e90fa0dcb80cbea54424aa09b192035f Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Tue, 29 Mar 2022 14:03:01 -0700 Subject: [PATCH 04/18] Updating csproj --- .../src/Microsoft.AspNetCore.Http.Results.csproj | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj index b6303146012c..c2b6c8fd8a96 100644 --- a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj +++ b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core types that implement Microsoft.AspNetCore.Http.IResult. @@ -17,6 +17,11 @@ + + True + True + ResultsCache.StatusCodes.tt + @@ -36,6 +41,7 @@ + From b7d7273a3fce0ac341e2e8b1f359c43326fac410 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 13:31:28 -0700 Subject: [PATCH 05/18] Updating autogenerated code --- .../src/ResultsCache.StatusCodes.cs | 253 +++++++++--------- .../src/ResultsCache.StatusCodes.tt | 137 +++++----- 2 files changed, 198 insertions(+), 192 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index b699bbb37616..2621cee827cc 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -2,142 +2,145 @@ // The .NET Foundation licenses this file to you under the MIT license. // +#nullable enable + namespace Microsoft.AspNetCore.Http; using System.CodeDom.Compiler; +using System.Runtime.CompilerServices; [GeneratedCode("TextTemplatingFileGenerator", "")] -internal static partial class ResultsCache +internal partial class ResultsCache { - private static readonly StatusCodeHttpResult Status100Continue = new(StatusCodes.Status100Continue); - private static readonly StatusCodeHttpResult Status101SwitchingProtocols = new(StatusCodes.Status101SwitchingProtocols); - private static readonly StatusCodeHttpResult Status102Processing = new(StatusCodes.Status102Processing); - private static readonly StatusCodeHttpResult Status200OK = new(StatusCodes.Status200OK); - private static readonly StatusCodeHttpResult Status201Created = new(StatusCodes.Status201Created); - private static readonly StatusCodeHttpResult Status202Accepted = new(StatusCodes.Status202Accepted); - private static readonly StatusCodeHttpResult Status203NonAuthoritative = new(StatusCodes.Status203NonAuthoritative); - private static readonly StatusCodeHttpResult Status204NoContent = new(StatusCodes.Status204NoContent); - private static readonly StatusCodeHttpResult Status205ResetContent = new(StatusCodes.Status205ResetContent); - private static readonly StatusCodeHttpResult Status206PartialContent = new(StatusCodes.Status206PartialContent); - private static readonly StatusCodeHttpResult Status207MultiStatus = new(StatusCodes.Status207MultiStatus); - private static readonly StatusCodeHttpResult Status208AlreadyReported = new(StatusCodes.Status208AlreadyReported); - private static readonly StatusCodeHttpResult Status226IMUsed = new(StatusCodes.Status226IMUsed); - private static readonly StatusCodeHttpResult Status300MultipleChoices = new(StatusCodes.Status300MultipleChoices); - private static readonly StatusCodeHttpResult Status301MovedPermanently = new(StatusCodes.Status301MovedPermanently); - private static readonly StatusCodeHttpResult Status302Found = new(StatusCodes.Status302Found); - private static readonly StatusCodeHttpResult Status303SeeOther = new(StatusCodes.Status303SeeOther); - private static readonly StatusCodeHttpResult Status304NotModified = new(StatusCodes.Status304NotModified); - private static readonly StatusCodeHttpResult Status305UseProxy = new(StatusCodes.Status305UseProxy); - private static readonly StatusCodeHttpResult Status306SwitchProxy = new(StatusCodes.Status306SwitchProxy); - private static readonly StatusCodeHttpResult Status307TemporaryRedirect = new(StatusCodes.Status307TemporaryRedirect); - private static readonly StatusCodeHttpResult Status308PermanentRedirect = new(StatusCodes.Status308PermanentRedirect); - private static readonly StatusCodeHttpResult Status400BadRequest = new(StatusCodes.Status400BadRequest); - private static readonly StatusCodeHttpResult Status401Unauthorized = new(StatusCodes.Status401Unauthorized); - private static readonly StatusCodeHttpResult Status402PaymentRequired = new(StatusCodes.Status402PaymentRequired); - private static readonly StatusCodeHttpResult Status403Forbidden = new(StatusCodes.Status403Forbidden); - private static readonly StatusCodeHttpResult Status404NotFound = new(StatusCodes.Status404NotFound); - private static readonly StatusCodeHttpResult Status405MethodNotAllowed = new(StatusCodes.Status405MethodNotAllowed); - private static readonly StatusCodeHttpResult Status406NotAcceptable = new(StatusCodes.Status406NotAcceptable); - private static readonly StatusCodeHttpResult Status407ProxyAuthenticationRequired = new(StatusCodes.Status407ProxyAuthenticationRequired); - private static readonly StatusCodeHttpResult Status408RequestTimeout = new(StatusCodes.Status408RequestTimeout); - private static readonly StatusCodeHttpResult Status409Conflict = new(StatusCodes.Status409Conflict); - private static readonly StatusCodeHttpResult Status410Gone = new(StatusCodes.Status410Gone); - private static readonly StatusCodeHttpResult Status411LengthRequired = new(StatusCodes.Status411LengthRequired); - private static readonly StatusCodeHttpResult Status412PreconditionFailed = new(StatusCodes.Status412PreconditionFailed); - private static readonly StatusCodeHttpResult Status413RequestEntityTooLarge = new(StatusCodes.Status413RequestEntityTooLarge); - private static readonly StatusCodeHttpResult Status414RequestUriTooLong = new(StatusCodes.Status414RequestUriTooLong); - private static readonly StatusCodeHttpResult Status415UnsupportedMediaType = new(StatusCodes.Status415UnsupportedMediaType); - private static readonly StatusCodeHttpResult Status416RequestedRangeNotSatisfiable = new(StatusCodes.Status416RequestedRangeNotSatisfiable); - private static readonly StatusCodeHttpResult Status417ExpectationFailed = new(StatusCodes.Status417ExpectationFailed); - private static readonly StatusCodeHttpResult Status418ImATeapot = new(StatusCodes.Status418ImATeapot); - private static readonly StatusCodeHttpResult Status419AuthenticationTimeout = new(StatusCodes.Status419AuthenticationTimeout); - private static readonly StatusCodeHttpResult Status421MisdirectedRequest = new(StatusCodes.Status421MisdirectedRequest); - private static readonly StatusCodeHttpResult Status422UnprocessableEntity = new(StatusCodes.Status422UnprocessableEntity); - private static readonly StatusCodeHttpResult Status423Locked = new(StatusCodes.Status423Locked); - private static readonly StatusCodeHttpResult Status424FailedDependency = new(StatusCodes.Status424FailedDependency); - private static readonly StatusCodeHttpResult Status426UpgradeRequired = new(StatusCodes.Status426UpgradeRequired); - private static readonly StatusCodeHttpResult Status428PreconditionRequired = new(StatusCodes.Status428PreconditionRequired); - private static readonly StatusCodeHttpResult Status429TooManyRequests = new(StatusCodes.Status429TooManyRequests); - private static readonly StatusCodeHttpResult Status431RequestHeaderFieldsTooLarge = new(StatusCodes.Status431RequestHeaderFieldsTooLarge); - private static readonly StatusCodeHttpResult Status451UnavailableForLegalReasons = new(StatusCodes.Status451UnavailableForLegalReasons); - private static readonly StatusCodeHttpResult Status500InternalServerError = new(StatusCodes.Status500InternalServerError); - private static readonly StatusCodeHttpResult Status501NotImplemented = new(StatusCodes.Status501NotImplemented); - private static readonly StatusCodeHttpResult Status502BadGateway = new(StatusCodes.Status502BadGateway); - private static readonly StatusCodeHttpResult Status503ServiceUnavailable = new(StatusCodes.Status503ServiceUnavailable); - private static readonly StatusCodeHttpResult Status504GatewayTimeout = new(StatusCodes.Status504GatewayTimeout); - private static readonly StatusCodeHttpResult Status505HttpVersionNotsupported = new(StatusCodes.Status505HttpVersionNotsupported); - private static readonly StatusCodeHttpResult Status506VariantAlsoNegotiates = new(StatusCodes.Status506VariantAlsoNegotiates); - private static readonly StatusCodeHttpResult Status507InsufficientStorage = new(StatusCodes.Status507InsufficientStorage); - private static readonly StatusCodeHttpResult Status508LoopDetected = new(StatusCodes.Status508LoopDetected); - private static readonly StatusCodeHttpResult Status510NotExtended = new(StatusCodes.Status510NotExtended); - private static readonly StatusCodeHttpResult Status511NetworkAuthenticationRequired = new(StatusCodes.Status511NetworkAuthenticationRequired); + private static StatusCodeHttpResult? _status100Continue; + private static StatusCodeHttpResult? _status101SwitchingProtocols; + private static StatusCodeHttpResult? _status102Processing; + private static StatusCodeHttpResult _status200OK = new(StatusCodes.Status200OK); + private static StatusCodeHttpResult _status201Created = new(StatusCodes.Status201Created); + private static StatusCodeHttpResult _status202Accepted = new(StatusCodes.Status202Accepted); + private static StatusCodeHttpResult? _status203NonAuthoritative; + private static StatusCodeHttpResult? _status204NoContent; + private static StatusCodeHttpResult? _status205ResetContent; + private static StatusCodeHttpResult? _status206PartialContent; + private static StatusCodeHttpResult? _status207MultiStatus; + private static StatusCodeHttpResult? _status208AlreadyReported; + private static StatusCodeHttpResult? _status226IMUsed; + private static StatusCodeHttpResult? _status300MultipleChoices; + private static StatusCodeHttpResult? _status301MovedPermanently; + private static StatusCodeHttpResult? _status302Found; + private static StatusCodeHttpResult? _status303SeeOther; + private static StatusCodeHttpResult? _status304NotModified; + private static StatusCodeHttpResult? _status305UseProxy; + private static StatusCodeHttpResult? _status306SwitchProxy; + private static StatusCodeHttpResult? _status307TemporaryRedirect; + private static StatusCodeHttpResult? _status308PermanentRedirect; + private static StatusCodeHttpResult? _status400BadRequest; + private static StatusCodeHttpResult? _status401Unauthorized; + private static StatusCodeHttpResult? _status402PaymentRequired; + private static StatusCodeHttpResult? _status403Forbidden; + private static StatusCodeHttpResult _status404NotFound = new(StatusCodes.Status404NotFound); + private static StatusCodeHttpResult? _status405MethodNotAllowed; + private static StatusCodeHttpResult? _status406NotAcceptable; + private static StatusCodeHttpResult? _status407ProxyAuthenticationRequired; + private static StatusCodeHttpResult? _status408RequestTimeout; + private static StatusCodeHttpResult _status409Conflict = new(StatusCodes.Status409Conflict); + private static StatusCodeHttpResult? _status410Gone; + private static StatusCodeHttpResult? _status411LengthRequired; + private static StatusCodeHttpResult? _status412PreconditionFailed; + private static StatusCodeHttpResult? _status413RequestEntityTooLarge; + private static StatusCodeHttpResult? _status414RequestUriTooLong; + private static StatusCodeHttpResult? _status415UnsupportedMediaType; + private static StatusCodeHttpResult? _status416RequestedRangeNotSatisfiable; + private static StatusCodeHttpResult? _status417ExpectationFailed; + private static StatusCodeHttpResult? _status418ImATeapot; + private static StatusCodeHttpResult? _status419AuthenticationTimeout; + private static StatusCodeHttpResult? _status421MisdirectedRequest; + private static StatusCodeHttpResult? _status422UnprocessableEntity; + private static StatusCodeHttpResult? _status423Locked; + private static StatusCodeHttpResult? _status424FailedDependency; + private static StatusCodeHttpResult? _status426UpgradeRequired; + private static StatusCodeHttpResult? _status428PreconditionRequired; + private static StatusCodeHttpResult? _status429TooManyRequests; + private static StatusCodeHttpResult? _status431RequestHeaderFieldsTooLarge; + private static StatusCodeHttpResult? _status451UnavailableForLegalReasons; + private static StatusCodeHttpResult _status500InternalServerError = new(StatusCodes.Status500InternalServerError); + private static StatusCodeHttpResult? _status501NotImplemented; + private static StatusCodeHttpResult? _status502BadGateway; + private static StatusCodeHttpResult? _status503ServiceUnavailable; + private static StatusCodeHttpResult? _status504GatewayTimeout; + private static StatusCodeHttpResult? _status505HttpVersionNotsupported; + private static StatusCodeHttpResult? _status506VariantAlsoNegotiates; + private static StatusCodeHttpResult? _status507InsufficientStorage; + private static StatusCodeHttpResult? _status508LoopDetected; + private static StatusCodeHttpResult? _status510NotExtended; + private static StatusCodeHttpResult? _status511NetworkAuthenticationRequired; internal static StatusCodeHttpResult StatusCode(int statusCode) { return statusCode switch { - StatusCodes.Status100Continue => Status100Continue, - StatusCodes.Status101SwitchingProtocols => Status101SwitchingProtocols, - StatusCodes.Status102Processing => Status102Processing, - StatusCodes.Status200OK => Status200OK, - StatusCodes.Status201Created => Status201Created, - StatusCodes.Status202Accepted => Status202Accepted, - StatusCodes.Status203NonAuthoritative => Status203NonAuthoritative, - StatusCodes.Status204NoContent => Status204NoContent, - StatusCodes.Status205ResetContent => Status205ResetContent, - StatusCodes.Status206PartialContent => Status206PartialContent, - StatusCodes.Status207MultiStatus => Status207MultiStatus, - StatusCodes.Status208AlreadyReported => Status208AlreadyReported, - StatusCodes.Status226IMUsed => Status226IMUsed, - StatusCodes.Status300MultipleChoices => Status300MultipleChoices, - StatusCodes.Status301MovedPermanently => Status301MovedPermanently, - StatusCodes.Status302Found => Status302Found, - StatusCodes.Status303SeeOther => Status303SeeOther, - StatusCodes.Status304NotModified => Status304NotModified, - StatusCodes.Status305UseProxy => Status305UseProxy, - StatusCodes.Status306SwitchProxy => Status306SwitchProxy, - StatusCodes.Status307TemporaryRedirect => Status307TemporaryRedirect, - StatusCodes.Status308PermanentRedirect => Status308PermanentRedirect, - StatusCodes.Status400BadRequest => Status400BadRequest, - StatusCodes.Status401Unauthorized => Status401Unauthorized, - StatusCodes.Status402PaymentRequired => Status402PaymentRequired, - StatusCodes.Status403Forbidden => Status403Forbidden, - StatusCodes.Status404NotFound => Status404NotFound, - StatusCodes.Status405MethodNotAllowed => Status405MethodNotAllowed, - StatusCodes.Status406NotAcceptable => Status406NotAcceptable, - StatusCodes.Status407ProxyAuthenticationRequired => Status407ProxyAuthenticationRequired, - StatusCodes.Status408RequestTimeout => Status408RequestTimeout, - StatusCodes.Status409Conflict => Status409Conflict, - StatusCodes.Status410Gone => Status410Gone, - StatusCodes.Status411LengthRequired => Status411LengthRequired, - StatusCodes.Status412PreconditionFailed => Status412PreconditionFailed, - StatusCodes.Status413RequestEntityTooLarge => Status413RequestEntityTooLarge, - StatusCodes.Status414RequestUriTooLong => Status414RequestUriTooLong, - StatusCodes.Status415UnsupportedMediaType => Status415UnsupportedMediaType, - StatusCodes.Status416RequestedRangeNotSatisfiable => Status416RequestedRangeNotSatisfiable, - StatusCodes.Status417ExpectationFailed => Status417ExpectationFailed, - StatusCodes.Status418ImATeapot => Status418ImATeapot, - StatusCodes.Status419AuthenticationTimeout => Status419AuthenticationTimeout, - StatusCodes.Status421MisdirectedRequest => Status421MisdirectedRequest, - StatusCodes.Status422UnprocessableEntity => Status422UnprocessableEntity, - StatusCodes.Status423Locked => Status423Locked, - StatusCodes.Status424FailedDependency => Status424FailedDependency, - StatusCodes.Status426UpgradeRequired => Status426UpgradeRequired, - StatusCodes.Status428PreconditionRequired => Status428PreconditionRequired, - StatusCodes.Status429TooManyRequests => Status429TooManyRequests, - StatusCodes.Status431RequestHeaderFieldsTooLarge => Status431RequestHeaderFieldsTooLarge, - StatusCodes.Status451UnavailableForLegalReasons => Status451UnavailableForLegalReasons, - StatusCodes.Status500InternalServerError => Status500InternalServerError, - StatusCodes.Status501NotImplemented => Status501NotImplemented, - StatusCodes.Status502BadGateway => Status502BadGateway, - StatusCodes.Status503ServiceUnavailable => Status503ServiceUnavailable, - StatusCodes.Status504GatewayTimeout => Status504GatewayTimeout, - StatusCodes.Status505HttpVersionNotsupported => Status505HttpVersionNotsupported, - StatusCodes.Status506VariantAlsoNegotiates => Status506VariantAlsoNegotiates, - StatusCodes.Status507InsufficientStorage => Status507InsufficientStorage, - StatusCodes.Status508LoopDetected => Status508LoopDetected, - StatusCodes.Status510NotExtended => Status510NotExtended, - StatusCodes.Status511NetworkAuthenticationRequired => Status511NetworkAuthenticationRequired, + StatusCodes.Status100Continue => _status100Continue ??= new(StatusCodes.Status100Continue), + StatusCodes.Status101SwitchingProtocols => _status101SwitchingProtocols ??= new(StatusCodes.Status101SwitchingProtocols), + StatusCodes.Status102Processing => _status102Processing ??= new(StatusCodes.Status102Processing), + StatusCodes.Status200OK => _status200OK, + StatusCodes.Status201Created => _status201Created, + StatusCodes.Status202Accepted => _status202Accepted, + StatusCodes.Status203NonAuthoritative => _status203NonAuthoritative ??= new(StatusCodes.Status203NonAuthoritative), + StatusCodes.Status204NoContent => _status204NoContent ??= new(StatusCodes.Status204NoContent), + StatusCodes.Status205ResetContent => _status205ResetContent ??= new(StatusCodes.Status205ResetContent), + StatusCodes.Status206PartialContent => _status206PartialContent ??= new(StatusCodes.Status206PartialContent), + StatusCodes.Status207MultiStatus => _status207MultiStatus ??= new(StatusCodes.Status207MultiStatus), + StatusCodes.Status208AlreadyReported => _status208AlreadyReported ??= new(StatusCodes.Status208AlreadyReported), + StatusCodes.Status226IMUsed => _status226IMUsed ??= new(StatusCodes.Status226IMUsed), + StatusCodes.Status300MultipleChoices => _status300MultipleChoices ??= new(StatusCodes.Status300MultipleChoices), + StatusCodes.Status301MovedPermanently => _status301MovedPermanently ??= new(StatusCodes.Status301MovedPermanently), + StatusCodes.Status302Found => _status302Found ??= new(StatusCodes.Status302Found), + StatusCodes.Status303SeeOther => _status303SeeOther ??= new(StatusCodes.Status303SeeOther), + StatusCodes.Status304NotModified => _status304NotModified ??= new(StatusCodes.Status304NotModified), + StatusCodes.Status305UseProxy => _status305UseProxy ??= new(StatusCodes.Status305UseProxy), + StatusCodes.Status306SwitchProxy => _status306SwitchProxy ??= new(StatusCodes.Status306SwitchProxy), + StatusCodes.Status307TemporaryRedirect => _status307TemporaryRedirect ??= new(StatusCodes.Status307TemporaryRedirect), + StatusCodes.Status308PermanentRedirect => _status308PermanentRedirect ??= new(StatusCodes.Status308PermanentRedirect), + StatusCodes.Status400BadRequest => _status400BadRequest ??= new(StatusCodes.Status400BadRequest), + StatusCodes.Status401Unauthorized => _status401Unauthorized ??= new(StatusCodes.Status401Unauthorized), + StatusCodes.Status402PaymentRequired => _status402PaymentRequired ??= new(StatusCodes.Status402PaymentRequired), + StatusCodes.Status403Forbidden => _status403Forbidden ??= new(StatusCodes.Status403Forbidden), + StatusCodes.Status404NotFound => _status404NotFound, + StatusCodes.Status405MethodNotAllowed => _status405MethodNotAllowed ??= new(StatusCodes.Status405MethodNotAllowed), + StatusCodes.Status406NotAcceptable => _status406NotAcceptable ??= new(StatusCodes.Status406NotAcceptable), + StatusCodes.Status407ProxyAuthenticationRequired => _status407ProxyAuthenticationRequired ??= new(StatusCodes.Status407ProxyAuthenticationRequired), + StatusCodes.Status408RequestTimeout => _status408RequestTimeout ??= new(StatusCodes.Status408RequestTimeout), + StatusCodes.Status409Conflict => _status409Conflict, + StatusCodes.Status410Gone => _status410Gone ??= new(StatusCodes.Status410Gone), + StatusCodes.Status411LengthRequired => _status411LengthRequired ??= new(StatusCodes.Status411LengthRequired), + StatusCodes.Status412PreconditionFailed => _status412PreconditionFailed ??= new(StatusCodes.Status412PreconditionFailed), + StatusCodes.Status413RequestEntityTooLarge => _status413RequestEntityTooLarge ??= new(StatusCodes.Status413RequestEntityTooLarge), + StatusCodes.Status414RequestUriTooLong => _status414RequestUriTooLong ??= new(StatusCodes.Status414RequestUriTooLong), + StatusCodes.Status415UnsupportedMediaType => _status415UnsupportedMediaType ??= new(StatusCodes.Status415UnsupportedMediaType), + StatusCodes.Status416RequestedRangeNotSatisfiable => _status416RequestedRangeNotSatisfiable ??= new(StatusCodes.Status416RequestedRangeNotSatisfiable), + StatusCodes.Status417ExpectationFailed => _status417ExpectationFailed ??= new(StatusCodes.Status417ExpectationFailed), + StatusCodes.Status418ImATeapot => _status418ImATeapot ??= new(StatusCodes.Status418ImATeapot), + StatusCodes.Status419AuthenticationTimeout => _status419AuthenticationTimeout ??= new(StatusCodes.Status419AuthenticationTimeout), + StatusCodes.Status421MisdirectedRequest => _status421MisdirectedRequest ??= new(StatusCodes.Status421MisdirectedRequest), + StatusCodes.Status422UnprocessableEntity => _status422UnprocessableEntity ??= new(StatusCodes.Status422UnprocessableEntity), + StatusCodes.Status423Locked => _status423Locked ??= new(StatusCodes.Status423Locked), + StatusCodes.Status424FailedDependency => _status424FailedDependency ??= new(StatusCodes.Status424FailedDependency), + StatusCodes.Status426UpgradeRequired => _status426UpgradeRequired ??= new(StatusCodes.Status426UpgradeRequired), + StatusCodes.Status428PreconditionRequired => _status428PreconditionRequired ??= new(StatusCodes.Status428PreconditionRequired), + StatusCodes.Status429TooManyRequests => _status429TooManyRequests ??= new(StatusCodes.Status429TooManyRequests), + StatusCodes.Status431RequestHeaderFieldsTooLarge => _status431RequestHeaderFieldsTooLarge ??= new(StatusCodes.Status431RequestHeaderFieldsTooLarge), + StatusCodes.Status451UnavailableForLegalReasons => _status451UnavailableForLegalReasons ??= new(StatusCodes.Status451UnavailableForLegalReasons), + StatusCodes.Status500InternalServerError => _status500InternalServerError, + StatusCodes.Status501NotImplemented => _status501NotImplemented ??= new(StatusCodes.Status501NotImplemented), + StatusCodes.Status502BadGateway => _status502BadGateway ??= new(StatusCodes.Status502BadGateway), + StatusCodes.Status503ServiceUnavailable => _status503ServiceUnavailable ??= new(StatusCodes.Status503ServiceUnavailable), + StatusCodes.Status504GatewayTimeout => _status504GatewayTimeout ??= new(StatusCodes.Status504GatewayTimeout), + StatusCodes.Status505HttpVersionNotsupported => _status505HttpVersionNotsupported ??= new(StatusCodes.Status505HttpVersionNotsupported), + StatusCodes.Status506VariantAlsoNegotiates => _status506VariantAlsoNegotiates ??= new(StatusCodes.Status506VariantAlsoNegotiates), + StatusCodes.Status507InsufficientStorage => _status507InsufficientStorage ??= new(StatusCodes.Status507InsufficientStorage), + StatusCodes.Status508LoopDetected => _status508LoopDetected ??= new(StatusCodes.Status508LoopDetected), + StatusCodes.Status510NotExtended => _status510NotExtended ??= new(StatusCodes.Status510NotExtended), + StatusCodes.Status511NetworkAuthenticationRequired => _status511NetworkAuthenticationRequired ??= new(StatusCodes.Status511NetworkAuthenticationRequired), _ => new StatusCodeHttpResult(statusCode), }; } diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 96f1ad381ae7..4f32de32381b 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -6,92 +6,95 @@ /// HTTP status codes. var statusCodes = new[] { - new { StatusCode = 100, Name = "100Continue"}, - new { StatusCode = 101, Name = "101SwitchingProtocols"}, - new { StatusCode = 102, Name = "102Processing"}, - new { StatusCode = 200, Name = "200OK"}, - new { StatusCode = 201, Name = "201Created"}, - new { StatusCode = 202, Name = "202Accepted"}, - new { StatusCode = 203, Name = "203NonAuthoritative"}, - new { StatusCode = 204, Name = "204NoContent"}, - new { StatusCode = 205, Name = "205ResetContent"}, - new { StatusCode = 206, Name = "206PartialContent"}, - new { StatusCode = 207, Name = "207MultiStatus"}, - new { StatusCode = 208, Name = "208AlreadyReported"}, - new { StatusCode = 226, Name = "226IMUsed"}, - new { StatusCode = 300, Name = "300MultipleChoices"}, - new { StatusCode = 301, Name = "301MovedPermanently"}, - new { StatusCode = 302, Name = "302Found"}, - new { StatusCode = 303, Name = "303SeeOther"}, - new { StatusCode = 304, Name = "304NotModified"}, - new { StatusCode = 305, Name = "305UseProxy"}, - new { StatusCode = 306, Name = "306SwitchProxy"}, - new { StatusCode = 307, Name = "307TemporaryRedirect"}, - new { StatusCode = 308, Name = "308PermanentRedirect"}, - new { StatusCode = 400, Name = "400BadRequest"}, - new { StatusCode = 401, Name = "401Unauthorized"}, - new { StatusCode = 402, Name = "402PaymentRequired"}, - new { StatusCode = 403, Name = "403Forbidden"}, - new { StatusCode = 404, Name = "404NotFound"}, - new { StatusCode = 405, Name = "405MethodNotAllowed"}, - new { StatusCode = 406, Name = "406NotAcceptable"}, - new { StatusCode = 407, Name = "407ProxyAuthenticationRequired"}, - new { StatusCode = 408, Name = "408RequestTimeout"}, - new { StatusCode = 409, Name = "409Conflict"}, - new { StatusCode = 410, Name = "410Gone"}, - new { StatusCode = 411, Name = "411LengthRequired"}, - new { StatusCode = 412, Name = "412PreconditionFailed"}, - new { StatusCode = 413, Name = "413RequestEntityTooLarge"}, - new { StatusCode = 414, Name = "414RequestUriTooLong"}, - new { StatusCode = 415, Name = "415UnsupportedMediaType"}, - new { StatusCode = 416, Name = "416RequestedRangeNotSatisfiable"}, - new { StatusCode = 417, Name = "417ExpectationFailed"}, - new { StatusCode = 418, Name = "418ImATeapot"}, - new { StatusCode = 419, Name = "419AuthenticationTimeout"}, - new { StatusCode = 421, Name = "421MisdirectedRequest"}, - new { StatusCode = 422, Name = "422UnprocessableEntity"}, - new { StatusCode = 423, Name = "423Locked"}, - new { StatusCode = 424, Name = "424FailedDependency"}, - new { StatusCode = 426, Name = "426UpgradeRequired"}, - new { StatusCode = 428, Name = "428PreconditionRequired"}, - new { StatusCode = 429, Name = "429TooManyRequests"}, - new { StatusCode = 431, Name = "431RequestHeaderFieldsTooLarge"}, - new { StatusCode = 451, Name = "451UnavailableForLegalReasons"}, - new { StatusCode = 500, Name = "500InternalServerError"}, - new { StatusCode = 501, Name = "501NotImplemented"}, - new { StatusCode = 502, Name = "502BadGateway"}, - new { StatusCode = 503, Name = "503ServiceUnavailable"}, - new { StatusCode = 504, Name = "504GatewayTimeout"}, - new { StatusCode = 505, Name = "505HttpVersionNotsupported"}, - new { StatusCode = 506, Name = "506VariantAlsoNegotiates"}, - new { StatusCode = 507, Name = "507InsufficientStorage"}, - new { StatusCode = 508, Name = "508LoopDetected"}, - new { StatusCode = 510, Name = "510NotExtended"}, - new { StatusCode = 511, Name = "511NetworkAuthenticationRequired"}, + new { StatusCode = 100, HotPath = false, Name = "100Continue"}, + new { StatusCode = 101, HotPath = false, Name = "101SwitchingProtocols"}, + new { StatusCode = 102, HotPath = false, Name = "102Processing"}, + new { StatusCode = 200, HotPath = true, Name = "200OK"}, + new { StatusCode = 201, HotPath = true, Name = "201Created"}, + new { StatusCode = 202, HotPath = true, Name = "202Accepted"}, + new { StatusCode = 203, HotPath = false, Name = "203NonAuthoritative"}, + new { StatusCode = 204, HotPath = false, Name = "204NoContent"}, + new { StatusCode = 205, HotPath = false, Name = "205ResetContent"}, + new { StatusCode = 206, HotPath = false, Name = "206PartialContent"}, + new { StatusCode = 207, HotPath = false, Name = "207MultiStatus"}, + new { StatusCode = 208, HotPath = false, Name = "208AlreadyReported"}, + new { StatusCode = 226, HotPath = false, Name = "226IMUsed"}, + new { StatusCode = 300, HotPath = false, Name = "300MultipleChoices"}, + new { StatusCode = 301, HotPath = false, Name = "301MovedPermanently"}, + new { StatusCode = 302, HotPath = false, Name = "302Found"}, + new { StatusCode = 303, HotPath = false, Name = "303SeeOther"}, + new { StatusCode = 304, HotPath = false, Name = "304NotModified"}, + new { StatusCode = 305, HotPath = false, Name = "305UseProxy"}, + new { StatusCode = 306, HotPath = false, Name = "306SwitchProxy"}, + new { StatusCode = 307, HotPath = false, Name = "307TemporaryRedirect"}, + new { StatusCode = 308, HotPath = false, Name = "308PermanentRedirect"}, + new { StatusCode = 400, HotPath = false, Name = "400BadRequest"}, + new { StatusCode = 401, HotPath = false, Name = "401Unauthorized"}, + new { StatusCode = 402, HotPath = false, Name = "402PaymentRequired"}, + new { StatusCode = 403, HotPath = false, Name = "403Forbidden"}, + new { StatusCode = 404, HotPath = true, Name = "404NotFound"}, + new { StatusCode = 405, HotPath = false, Name = "405MethodNotAllowed"}, + new { StatusCode = 406, HotPath = false, Name = "406NotAcceptable"}, + new { StatusCode = 407, HotPath = false, Name = "407ProxyAuthenticationRequired"}, + new { StatusCode = 408, HotPath = false, Name = "408RequestTimeout"}, + new { StatusCode = 409, HotPath = true, Name = "409Conflict"}, + new { StatusCode = 410, HotPath = false, Name = "410Gone"}, + new { StatusCode = 411, HotPath = false, Name = "411LengthRequired"}, + new { StatusCode = 412, HotPath = false, Name = "412PreconditionFailed"}, + new { StatusCode = 413, HotPath = false, Name = "413RequestEntityTooLarge"}, + new { StatusCode = 414, HotPath = false, Name = "414RequestUriTooLong"}, + new { StatusCode = 415, HotPath = false, Name = "415UnsupportedMediaType"}, + new { StatusCode = 416, HotPath = false, Name = "416RequestedRangeNotSatisfiable"}, + new { StatusCode = 417, HotPath = false, Name = "417ExpectationFailed"}, + new { StatusCode = 418, HotPath = false, Name = "418ImATeapot"}, + new { StatusCode = 419, HotPath = false, Name = "419AuthenticationTimeout"}, + new { StatusCode = 421, HotPath = false, Name = "421MisdirectedRequest"}, + new { StatusCode = 422, HotPath = false, Name = "422UnprocessableEntity"}, + new { StatusCode = 423, HotPath = false, Name = "423Locked"}, + new { StatusCode = 424, HotPath = false, Name = "424FailedDependency"}, + new { StatusCode = 426, HotPath = false, Name = "426UpgradeRequired"}, + new { StatusCode = 428, HotPath = false, Name = "428PreconditionRequired"}, + new { StatusCode = 429, HotPath = false, Name = "429TooManyRequests"}, + new { StatusCode = 431, HotPath = false, Name = "431RequestHeaderFieldsTooLarge"}, + new { StatusCode = 451, HotPath = false, Name = "451UnavailableForLegalReasons"}, + new { StatusCode = 500, HotPath = true, Name = "500InternalServerError"}, + new { StatusCode = 501, HotPath = false, Name = "501NotImplemented"}, + new { StatusCode = 502, HotPath = false, Name = "502BadGateway"}, + new { StatusCode = 503, HotPath = false, Name = "503ServiceUnavailable"}, + new { StatusCode = 504, HotPath = false, Name = "504GatewayTimeout"}, + new { StatusCode = 505, HotPath = false, Name = "505HttpVersionNotsupported"}, + new { StatusCode = 506, HotPath = false, Name = "506VariantAlsoNegotiates"}, + new { StatusCode = 507, HotPath = false, Name = "507InsufficientStorage"}, + new { StatusCode = 508, HotPath = false, Name = "508LoopDetected"}, + new { StatusCode = 510, HotPath = false, Name = "510NotExtended"}, + new { StatusCode = 511, HotPath = false, Name = "511NetworkAuthenticationRequired"}, }; #> // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // +#nullable enable + namespace Microsoft.AspNetCore.Http; using System.CodeDom.Compiler; +using System.Runtime.CompilerServices; [GeneratedCode("TextTemplatingFileGenerator", "")] -internal static partial class ResultsCache +internal partial class ResultsCache { <# foreach (var statusCode in statusCodes) { #> - private static readonly StatusCodeHttpResult Status<#= statusCode.Name #> = new(StatusCodes.Status<#= statusCode.Name #>); -<# } #> + private static <#= statusCode.HotPath ? "StatusCodeHttpResult" : "StatusCodeHttpResult?" #> _status<#= statusCode.Name #><# if (statusCode.HotPath) { #> = new(StatusCodes.Status<#= statusCode.Name #>)<# }#>; +<# } #> internal static StatusCodeHttpResult StatusCode(int statusCode) { return statusCode switch { <# foreach (var statusCode in statusCodes) { #> - StatusCodes.Status<#= statusCode.Name #> => Status<#= statusCode.Name #>, -<# } #> + StatusCodes.Status<#= statusCode.Name #> => _status<#= statusCode.Name #><# if (!statusCode.HotPath) { #> ??= new(StatusCodes.Status<#= statusCode.Name #>)<#}#>, +<# } #> _ => new StatusCodeHttpResult(statusCode), }; } From 2fe11a98d64fe202c65b1ea4027c31e90eadd064 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 14:54:55 -0700 Subject: [PATCH 06/18] Removing non-lazy cache --- .../src/ResultsCache.StatusCodes.cs | 24 ++-- .../src/ResultsCache.StatusCodes.tt | 128 +++++++++--------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index 2621cee827cc..51dba1982f32 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -15,9 +15,9 @@ internal partial class ResultsCache private static StatusCodeHttpResult? _status100Continue; private static StatusCodeHttpResult? _status101SwitchingProtocols; private static StatusCodeHttpResult? _status102Processing; - private static StatusCodeHttpResult _status200OK = new(StatusCodes.Status200OK); - private static StatusCodeHttpResult _status201Created = new(StatusCodes.Status201Created); - private static StatusCodeHttpResult _status202Accepted = new(StatusCodes.Status202Accepted); + private static StatusCodeHttpResult? _status200OK; + private static StatusCodeHttpResult? _status201Created; + private static StatusCodeHttpResult? _status202Accepted; private static StatusCodeHttpResult? _status203NonAuthoritative; private static StatusCodeHttpResult? _status204NoContent; private static StatusCodeHttpResult? _status205ResetContent; @@ -38,12 +38,12 @@ internal partial class ResultsCache private static StatusCodeHttpResult? _status401Unauthorized; private static StatusCodeHttpResult? _status402PaymentRequired; private static StatusCodeHttpResult? _status403Forbidden; - private static StatusCodeHttpResult _status404NotFound = new(StatusCodes.Status404NotFound); + private static StatusCodeHttpResult? _status404NotFound; private static StatusCodeHttpResult? _status405MethodNotAllowed; private static StatusCodeHttpResult? _status406NotAcceptable; private static StatusCodeHttpResult? _status407ProxyAuthenticationRequired; private static StatusCodeHttpResult? _status408RequestTimeout; - private static StatusCodeHttpResult _status409Conflict = new(StatusCodes.Status409Conflict); + private static StatusCodeHttpResult? _status409Conflict; private static StatusCodeHttpResult? _status410Gone; private static StatusCodeHttpResult? _status411LengthRequired; private static StatusCodeHttpResult? _status412PreconditionFailed; @@ -63,7 +63,7 @@ internal partial class ResultsCache private static StatusCodeHttpResult? _status429TooManyRequests; private static StatusCodeHttpResult? _status431RequestHeaderFieldsTooLarge; private static StatusCodeHttpResult? _status451UnavailableForLegalReasons; - private static StatusCodeHttpResult _status500InternalServerError = new(StatusCodes.Status500InternalServerError); + private static StatusCodeHttpResult? _status500InternalServerError; private static StatusCodeHttpResult? _status501NotImplemented; private static StatusCodeHttpResult? _status502BadGateway; private static StatusCodeHttpResult? _status503ServiceUnavailable; @@ -82,9 +82,9 @@ internal static StatusCodeHttpResult StatusCode(int statusCode) StatusCodes.Status100Continue => _status100Continue ??= new(StatusCodes.Status100Continue), StatusCodes.Status101SwitchingProtocols => _status101SwitchingProtocols ??= new(StatusCodes.Status101SwitchingProtocols), StatusCodes.Status102Processing => _status102Processing ??= new(StatusCodes.Status102Processing), - StatusCodes.Status200OK => _status200OK, - StatusCodes.Status201Created => _status201Created, - StatusCodes.Status202Accepted => _status202Accepted, + StatusCodes.Status200OK => _status200OK ??= new(StatusCodes.Status200OK), + StatusCodes.Status201Created => _status201Created ??= new(StatusCodes.Status201Created), + StatusCodes.Status202Accepted => _status202Accepted ??= new(StatusCodes.Status202Accepted), StatusCodes.Status203NonAuthoritative => _status203NonAuthoritative ??= new(StatusCodes.Status203NonAuthoritative), StatusCodes.Status204NoContent => _status204NoContent ??= new(StatusCodes.Status204NoContent), StatusCodes.Status205ResetContent => _status205ResetContent ??= new(StatusCodes.Status205ResetContent), @@ -105,12 +105,12 @@ internal static StatusCodeHttpResult StatusCode(int statusCode) StatusCodes.Status401Unauthorized => _status401Unauthorized ??= new(StatusCodes.Status401Unauthorized), StatusCodes.Status402PaymentRequired => _status402PaymentRequired ??= new(StatusCodes.Status402PaymentRequired), StatusCodes.Status403Forbidden => _status403Forbidden ??= new(StatusCodes.Status403Forbidden), - StatusCodes.Status404NotFound => _status404NotFound, + StatusCodes.Status404NotFound => _status404NotFound ??= new(StatusCodes.Status404NotFound), StatusCodes.Status405MethodNotAllowed => _status405MethodNotAllowed ??= new(StatusCodes.Status405MethodNotAllowed), StatusCodes.Status406NotAcceptable => _status406NotAcceptable ??= new(StatusCodes.Status406NotAcceptable), StatusCodes.Status407ProxyAuthenticationRequired => _status407ProxyAuthenticationRequired ??= new(StatusCodes.Status407ProxyAuthenticationRequired), StatusCodes.Status408RequestTimeout => _status408RequestTimeout ??= new(StatusCodes.Status408RequestTimeout), - StatusCodes.Status409Conflict => _status409Conflict, + StatusCodes.Status409Conflict => _status409Conflict ??= new(StatusCodes.Status409Conflict), StatusCodes.Status410Gone => _status410Gone ??= new(StatusCodes.Status410Gone), StatusCodes.Status411LengthRequired => _status411LengthRequired ??= new(StatusCodes.Status411LengthRequired), StatusCodes.Status412PreconditionFailed => _status412PreconditionFailed ??= new(StatusCodes.Status412PreconditionFailed), @@ -130,7 +130,7 @@ internal static StatusCodeHttpResult StatusCode(int statusCode) StatusCodes.Status429TooManyRequests => _status429TooManyRequests ??= new(StatusCodes.Status429TooManyRequests), StatusCodes.Status431RequestHeaderFieldsTooLarge => _status431RequestHeaderFieldsTooLarge ??= new(StatusCodes.Status431RequestHeaderFieldsTooLarge), StatusCodes.Status451UnavailableForLegalReasons => _status451UnavailableForLegalReasons ??= new(StatusCodes.Status451UnavailableForLegalReasons), - StatusCodes.Status500InternalServerError => _status500InternalServerError, + StatusCodes.Status500InternalServerError => _status500InternalServerError ??= new(StatusCodes.Status500InternalServerError), StatusCodes.Status501NotImplemented => _status501NotImplemented ??= new(StatusCodes.Status501NotImplemented), StatusCodes.Status502BadGateway => _status502BadGateway ??= new(StatusCodes.Status502BadGateway), StatusCodes.Status503ServiceUnavailable => _status503ServiceUnavailable ??= new(StatusCodes.Status503ServiceUnavailable), diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 4f32de32381b..eb373f6eed71 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -6,68 +6,68 @@ /// HTTP status codes. var statusCodes = new[] { - new { StatusCode = 100, HotPath = false, Name = "100Continue"}, - new { StatusCode = 101, HotPath = false, Name = "101SwitchingProtocols"}, - new { StatusCode = 102, HotPath = false, Name = "102Processing"}, - new { StatusCode = 200, HotPath = true, Name = "200OK"}, - new { StatusCode = 201, HotPath = true, Name = "201Created"}, - new { StatusCode = 202, HotPath = true, Name = "202Accepted"}, - new { StatusCode = 203, HotPath = false, Name = "203NonAuthoritative"}, - new { StatusCode = 204, HotPath = false, Name = "204NoContent"}, - new { StatusCode = 205, HotPath = false, Name = "205ResetContent"}, - new { StatusCode = 206, HotPath = false, Name = "206PartialContent"}, - new { StatusCode = 207, HotPath = false, Name = "207MultiStatus"}, - new { StatusCode = 208, HotPath = false, Name = "208AlreadyReported"}, - new { StatusCode = 226, HotPath = false, Name = "226IMUsed"}, - new { StatusCode = 300, HotPath = false, Name = "300MultipleChoices"}, - new { StatusCode = 301, HotPath = false, Name = "301MovedPermanently"}, - new { StatusCode = 302, HotPath = false, Name = "302Found"}, - new { StatusCode = 303, HotPath = false, Name = "303SeeOther"}, - new { StatusCode = 304, HotPath = false, Name = "304NotModified"}, - new { StatusCode = 305, HotPath = false, Name = "305UseProxy"}, - new { StatusCode = 306, HotPath = false, Name = "306SwitchProxy"}, - new { StatusCode = 307, HotPath = false, Name = "307TemporaryRedirect"}, - new { StatusCode = 308, HotPath = false, Name = "308PermanentRedirect"}, - new { StatusCode = 400, HotPath = false, Name = "400BadRequest"}, - new { StatusCode = 401, HotPath = false, Name = "401Unauthorized"}, - new { StatusCode = 402, HotPath = false, Name = "402PaymentRequired"}, - new { StatusCode = 403, HotPath = false, Name = "403Forbidden"}, - new { StatusCode = 404, HotPath = true, Name = "404NotFound"}, - new { StatusCode = 405, HotPath = false, Name = "405MethodNotAllowed"}, - new { StatusCode = 406, HotPath = false, Name = "406NotAcceptable"}, - new { StatusCode = 407, HotPath = false, Name = "407ProxyAuthenticationRequired"}, - new { StatusCode = 408, HotPath = false, Name = "408RequestTimeout"}, - new { StatusCode = 409, HotPath = true, Name = "409Conflict"}, - new { StatusCode = 410, HotPath = false, Name = "410Gone"}, - new { StatusCode = 411, HotPath = false, Name = "411LengthRequired"}, - new { StatusCode = 412, HotPath = false, Name = "412PreconditionFailed"}, - new { StatusCode = 413, HotPath = false, Name = "413RequestEntityTooLarge"}, - new { StatusCode = 414, HotPath = false, Name = "414RequestUriTooLong"}, - new { StatusCode = 415, HotPath = false, Name = "415UnsupportedMediaType"}, - new { StatusCode = 416, HotPath = false, Name = "416RequestedRangeNotSatisfiable"}, - new { StatusCode = 417, HotPath = false, Name = "417ExpectationFailed"}, - new { StatusCode = 418, HotPath = false, Name = "418ImATeapot"}, - new { StatusCode = 419, HotPath = false, Name = "419AuthenticationTimeout"}, - new { StatusCode = 421, HotPath = false, Name = "421MisdirectedRequest"}, - new { StatusCode = 422, HotPath = false, Name = "422UnprocessableEntity"}, - new { StatusCode = 423, HotPath = false, Name = "423Locked"}, - new { StatusCode = 424, HotPath = false, Name = "424FailedDependency"}, - new { StatusCode = 426, HotPath = false, Name = "426UpgradeRequired"}, - new { StatusCode = 428, HotPath = false, Name = "428PreconditionRequired"}, - new { StatusCode = 429, HotPath = false, Name = "429TooManyRequests"}, - new { StatusCode = 431, HotPath = false, Name = "431RequestHeaderFieldsTooLarge"}, - new { StatusCode = 451, HotPath = false, Name = "451UnavailableForLegalReasons"}, - new { StatusCode = 500, HotPath = true, Name = "500InternalServerError"}, - new { StatusCode = 501, HotPath = false, Name = "501NotImplemented"}, - new { StatusCode = 502, HotPath = false, Name = "502BadGateway"}, - new { StatusCode = 503, HotPath = false, Name = "503ServiceUnavailable"}, - new { StatusCode = 504, HotPath = false, Name = "504GatewayTimeout"}, - new { StatusCode = 505, HotPath = false, Name = "505HttpVersionNotsupported"}, - new { StatusCode = 506, HotPath = false, Name = "506VariantAlsoNegotiates"}, - new { StatusCode = 507, HotPath = false, Name = "507InsufficientStorage"}, - new { StatusCode = 508, HotPath = false, Name = "508LoopDetected"}, - new { StatusCode = 510, HotPath = false, Name = "510NotExtended"}, - new { StatusCode = 511, HotPath = false, Name = "511NetworkAuthenticationRequired"}, + new { StatusCode = 100, Name = "100Continue"}, + new { StatusCode = 101, Name = "101SwitchingProtocols"}, + new { StatusCode = 102, Name = "102Processing"}, + new { StatusCode = 200, Name = "200OK"}, + new { StatusCode = 201, Name = "201Created"}, + new { StatusCode = 202, Name = "202Accepted"}, + new { StatusCode = 203, Name = "203NonAuthoritative"}, + new { StatusCode = 204, Name = "204NoContent"}, + new { StatusCode = 205, Name = "205ResetContent"}, + new { StatusCode = 206, Name = "206PartialContent"}, + new { StatusCode = 207, Name = "207MultiStatus"}, + new { StatusCode = 208, Name = "208AlreadyReported"}, + new { StatusCode = 226, Name = "226IMUsed"}, + new { StatusCode = 300, Name = "300MultipleChoices"}, + new { StatusCode = 301, Name = "301MovedPermanently"}, + new { StatusCode = 302, Name = "302Found"}, + new { StatusCode = 303, Name = "303SeeOther"}, + new { StatusCode = 304, Name = "304NotModified"}, + new { StatusCode = 305, Name = "305UseProxy"}, + new { StatusCode = 306, Name = "306SwitchProxy"}, + new { StatusCode = 307, Name = "307TemporaryRedirect"}, + new { StatusCode = 308, Name = "308PermanentRedirect"}, + new { StatusCode = 400, Name = "400BadRequest"}, + new { StatusCode = 401, Name = "401Unauthorized"}, + new { StatusCode = 402, Name = "402PaymentRequired"}, + new { StatusCode = 403, Name = "403Forbidden"}, + new { StatusCode = 404, Name = "404NotFound"}, + new { StatusCode = 405, Name = "405MethodNotAllowed"}, + new { StatusCode = 406, Name = "406NotAcceptable"}, + new { StatusCode = 407, Name = "407ProxyAuthenticationRequired"}, + new { StatusCode = 408, Name = "408RequestTimeout"}, + new { StatusCode = 409, Name = "409Conflict"}, + new { StatusCode = 410, Name = "410Gone"}, + new { StatusCode = 411, Name = "411LengthRequired"}, + new { StatusCode = 412, Name = "412PreconditionFailed"}, + new { StatusCode = 413, Name = "413RequestEntityTooLarge"}, + new { StatusCode = 414, Name = "414RequestUriTooLong"}, + new { StatusCode = 415, Name = "415UnsupportedMediaType"}, + new { StatusCode = 416, Name = "416RequestedRangeNotSatisfiable"}, + new { StatusCode = 417, Name = "417ExpectationFailed"}, + new { StatusCode = 418, Name = "418ImATeapot"}, + new { StatusCode = 419, Name = "419AuthenticationTimeout"}, + new { StatusCode = 421, Name = "421MisdirectedRequest"}, + new { StatusCode = 422, Name = "422UnprocessableEntity"}, + new { StatusCode = 423, Name = "423Locked"}, + new { StatusCode = 424, Name = "424FailedDependency"}, + new { StatusCode = 426, Name = "426UpgradeRequired"}, + new { StatusCode = 428, Name = "428PreconditionRequired"}, + new { StatusCode = 429, Name = "429TooManyRequests"}, + new { StatusCode = 431, Name = "431RequestHeaderFieldsTooLarge"}, + new { StatusCode = 451, Name = "451UnavailableForLegalReasons"}, + new { StatusCode = 500, Name = "500InternalServerError"}, + new { StatusCode = 501, Name = "501NotImplemented"}, + new { StatusCode = 502, Name = "502BadGateway"}, + new { StatusCode = 503, Name = "503ServiceUnavailable"}, + new { StatusCode = 504, Name = "504GatewayTimeout"}, + new { StatusCode = 505, Name = "505HttpVersionNotsupported"}, + new { StatusCode = 506, Name = "506VariantAlsoNegotiates"}, + new { StatusCode = 507, Name = "507InsufficientStorage"}, + new { StatusCode = 508, Name = "508LoopDetected"}, + new { StatusCode = 510, Name = "510NotExtended"}, + new { StatusCode = 511, Name = "511NetworkAuthenticationRequired"}, }; #> // Licensed to the .NET Foundation under one or more agreements. @@ -85,7 +85,7 @@ using System.Runtime.CompilerServices; internal partial class ResultsCache { <# foreach (var statusCode in statusCodes) { #> - private static <#= statusCode.HotPath ? "StatusCodeHttpResult" : "StatusCodeHttpResult?" #> _status<#= statusCode.Name #><# if (statusCode.HotPath) { #> = new(StatusCodes.Status<#= statusCode.Name #>)<# }#>; + private static StatusCodeHttpResult? _status<#= statusCode.Name #>; <# } #> internal static StatusCodeHttpResult StatusCode(int statusCode) @@ -93,7 +93,7 @@ internal partial class ResultsCache return statusCode switch { <# foreach (var statusCode in statusCodes) { #> - StatusCodes.Status<#= statusCode.Name #> => _status<#= statusCode.Name #><# if (!statusCode.HotPath) { #> ??= new(StatusCodes.Status<#= statusCode.Name #>)<#}#>, + StatusCodes.Status<#= statusCode.Name #> => _status<#= statusCode.Name #> ??= new(StatusCodes.Status<#= statusCode.Name #>), <# } #> _ => new StatusCodeHttpResult(statusCode), }; From 09439cb16bdb466fee8dc5910c8a695986f681a1 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 14:58:57 -0700 Subject: [PATCH 07/18] formatting fix --- .../src/ResultsCache.StatusCodes.tt | 122 +++++++++--------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index eb373f6eed71..d0bd7f56dca4 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -7,67 +7,67 @@ var statusCodes = new[] { new { StatusCode = 100, Name = "100Continue"}, - new { StatusCode = 101, Name = "101SwitchingProtocols"}, - new { StatusCode = 102, Name = "102Processing"}, - new { StatusCode = 200, Name = "200OK"}, - new { StatusCode = 201, Name = "201Created"}, - new { StatusCode = 202, Name = "202Accepted"}, - new { StatusCode = 203, Name = "203NonAuthoritative"}, - new { StatusCode = 204, Name = "204NoContent"}, - new { StatusCode = 205, Name = "205ResetContent"}, - new { StatusCode = 206, Name = "206PartialContent"}, - new { StatusCode = 207, Name = "207MultiStatus"}, - new { StatusCode = 208, Name = "208AlreadyReported"}, - new { StatusCode = 226, Name = "226IMUsed"}, - new { StatusCode = 300, Name = "300MultipleChoices"}, - new { StatusCode = 301, Name = "301MovedPermanently"}, - new { StatusCode = 302, Name = "302Found"}, - new { StatusCode = 303, Name = "303SeeOther"}, - new { StatusCode = 304, Name = "304NotModified"}, - new { StatusCode = 305, Name = "305UseProxy"}, - new { StatusCode = 306, Name = "306SwitchProxy"}, - new { StatusCode = 307, Name = "307TemporaryRedirect"}, - new { StatusCode = 308, Name = "308PermanentRedirect"}, - new { StatusCode = 400, Name = "400BadRequest"}, - new { StatusCode = 401, Name = "401Unauthorized"}, - new { StatusCode = 402, Name = "402PaymentRequired"}, - new { StatusCode = 403, Name = "403Forbidden"}, - new { StatusCode = 404, Name = "404NotFound"}, - new { StatusCode = 405, Name = "405MethodNotAllowed"}, - new { StatusCode = 406, Name = "406NotAcceptable"}, - new { StatusCode = 407, Name = "407ProxyAuthenticationRequired"}, - new { StatusCode = 408, Name = "408RequestTimeout"}, - new { StatusCode = 409, Name = "409Conflict"}, - new { StatusCode = 410, Name = "410Gone"}, - new { StatusCode = 411, Name = "411LengthRequired"}, - new { StatusCode = 412, Name = "412PreconditionFailed"}, - new { StatusCode = 413, Name = "413RequestEntityTooLarge"}, - new { StatusCode = 414, Name = "414RequestUriTooLong"}, - new { StatusCode = 415, Name = "415UnsupportedMediaType"}, - new { StatusCode = 416, Name = "416RequestedRangeNotSatisfiable"}, - new { StatusCode = 417, Name = "417ExpectationFailed"}, - new { StatusCode = 418, Name = "418ImATeapot"}, - new { StatusCode = 419, Name = "419AuthenticationTimeout"}, - new { StatusCode = 421, Name = "421MisdirectedRequest"}, - new { StatusCode = 422, Name = "422UnprocessableEntity"}, - new { StatusCode = 423, Name = "423Locked"}, - new { StatusCode = 424, Name = "424FailedDependency"}, - new { StatusCode = 426, Name = "426UpgradeRequired"}, - new { StatusCode = 428, Name = "428PreconditionRequired"}, - new { StatusCode = 429, Name = "429TooManyRequests"}, - new { StatusCode = 431, Name = "431RequestHeaderFieldsTooLarge"}, - new { StatusCode = 451, Name = "451UnavailableForLegalReasons"}, - new { StatusCode = 500, Name = "500InternalServerError"}, - new { StatusCode = 501, Name = "501NotImplemented"}, - new { StatusCode = 502, Name = "502BadGateway"}, - new { StatusCode = 503, Name = "503ServiceUnavailable"}, - new { StatusCode = 504, Name = "504GatewayTimeout"}, - new { StatusCode = 505, Name = "505HttpVersionNotsupported"}, - new { StatusCode = 506, Name = "506VariantAlsoNegotiates"}, - new { StatusCode = 507, Name = "507InsufficientStorage"}, - new { StatusCode = 508, Name = "508LoopDetected"}, - new { StatusCode = 510, Name = "510NotExtended"}, - new { StatusCode = 511, Name = "511NetworkAuthenticationRequired"}, + new { StatusCode = 101, Name = "101SwitchingProtocols"}, + new { StatusCode = 102, Name = "102Processing"}, + new { StatusCode = 200, Name = "200OK"}, + new { StatusCode = 201, Name = "201Created"}, + new { StatusCode = 202, Name = "202Accepted"}, + new { StatusCode = 203, Name = "203NonAuthoritative"}, + new { StatusCode = 204, Name = "204NoContent"}, + new { StatusCode = 205, Name = "205ResetContent"}, + new { StatusCode = 206, Name = "206PartialContent"}, + new { StatusCode = 207, Name = "207MultiStatus"}, + new { StatusCode = 208, Name = "208AlreadyReported"}, + new { StatusCode = 226, Name = "226IMUsed"}, + new { StatusCode = 300, Name = "300MultipleChoices"}, + new { StatusCode = 301, Name = "301MovedPermanently"}, + new { StatusCode = 302, Name = "302Found"}, + new { StatusCode = 303, Name = "303SeeOther"}, + new { StatusCode = 304, Name = "304NotModified"}, + new { StatusCode = 305, Name = "305UseProxy"}, + new { StatusCode = 306, Name = "306SwitchProxy"}, + new { StatusCode = 307, Name = "307TemporaryRedirect"}, + new { StatusCode = 308, Name = "308PermanentRedirect"}, + new { StatusCode = 400, Name = "400BadRequest"}, + new { StatusCode = 401, Name = "401Unauthorized"}, + new { StatusCode = 402, Name = "402PaymentRequired"}, + new { StatusCode = 403, Name = "403Forbidden"}, + new { StatusCode = 404, Name = "404NotFound"}, + new { StatusCode = 405, Name = "405MethodNotAllowed"}, + new { StatusCode = 406, Name = "406NotAcceptable"}, + new { StatusCode = 407, Name = "407ProxyAuthenticationRequired"}, + new { StatusCode = 408, Name = "408RequestTimeout"}, + new { StatusCode = 409, Name = "409Conflict"}, + new { StatusCode = 410, Name = "410Gone"}, + new { StatusCode = 411, Name = "411LengthRequired"}, + new { StatusCode = 412, Name = "412PreconditionFailed"}, + new { StatusCode = 413, Name = "413RequestEntityTooLarge"}, + new { StatusCode = 414, Name = "414RequestUriTooLong"}, + new { StatusCode = 415, Name = "415UnsupportedMediaType"}, + new { StatusCode = 416, Name = "416RequestedRangeNotSatisfiable"}, + new { StatusCode = 417, Name = "417ExpectationFailed"}, + new { StatusCode = 418, Name = "418ImATeapot"}, + new { StatusCode = 419, Name = "419AuthenticationTimeout"}, + new { StatusCode = 421, Name = "421MisdirectedRequest"}, + new { StatusCode = 422, Name = "422UnprocessableEntity"}, + new { StatusCode = 423, Name = "423Locked"}, + new { StatusCode = 424, Name = "424FailedDependency"}, + new { StatusCode = 426, Name = "426UpgradeRequired"}, + new { StatusCode = 428, Name = "428PreconditionRequired"}, + new { StatusCode = 429, Name = "429TooManyRequests"}, + new { StatusCode = 431, Name = "431RequestHeaderFieldsTooLarge"}, + new { StatusCode = 451, Name = "451UnavailableForLegalReasons"}, + new { StatusCode = 500, Name = "500InternalServerError"}, + new { StatusCode = 501, Name = "501NotImplemented"}, + new { StatusCode = 502, Name = "502BadGateway"}, + new { StatusCode = 503, Name = "503ServiceUnavailable"}, + new { StatusCode = 504, Name = "504GatewayTimeout"}, + new { StatusCode = 505, Name = "505HttpVersionNotsupported"}, + new { StatusCode = 506, Name = "506VariantAlsoNegotiates"}, + new { StatusCode = 507, Name = "507InsufficientStorage"}, + new { StatusCode = 508, Name = "508LoopDetected"}, + new { StatusCode = 510, Name = "510NotExtended"}, + new { StatusCode = 511, Name = "511NetworkAuthenticationRequired"}, }; #> // Licensed to the .NET Foundation under one or more agreements. From 99da26a9917758d671ab1f6c9a2fd6a22f8efbea Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 15:53:19 -0700 Subject: [PATCH 08/18] small perf condition --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 1 + src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index 51dba1982f32..07d2ee859e44 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -79,6 +79,7 @@ internal static StatusCodeHttpResult StatusCode(int statusCode) { return statusCode switch { + (< 100) or (> 599) => new StatusCodeHttpResult(statusCode), // No HTTP status code assigned outside the 100..599 range StatusCodes.Status100Continue => _status100Continue ??= new(StatusCodes.Status100Continue), StatusCodes.Status101SwitchingProtocols => _status101SwitchingProtocols ??= new(StatusCodes.Status101SwitchingProtocols), StatusCodes.Status102Processing => _status102Processing ??= new(StatusCodes.Status102Processing), diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index d0bd7f56dca4..61b6434a7746 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -92,6 +92,7 @@ internal partial class ResultsCache { return statusCode switch { + (< 100) or (> 599) => new StatusCodeHttpResult(statusCode), // No HTTP status code assigned outside the 100..599 range <# foreach (var statusCode in statusCodes) { #> StatusCodes.Status<#= statusCode.Name #> => _status<#= statusCode.Name #> ??= new(StatusCodes.Status<#= statusCode.Name #>), <# } #> From beb29408ed67050112b96f38f44e563d4b077c4c Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 16:32:40 -0700 Subject: [PATCH 09/18] small perf --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 8 +++++++- src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index 07d2ee859e44..409ad3117ff5 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -77,9 +77,15 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { + if ( statusCode is (< 100) or (> 511)) + { + // No HTTP status code assigned outside the 100..599 range + // so, it will not be available in the cache + return new StatusCodeHttpResult(statusCode); + } + return statusCode switch { - (< 100) or (> 599) => new StatusCodeHttpResult(statusCode), // No HTTP status code assigned outside the 100..599 range StatusCodes.Status100Continue => _status100Continue ??= new(StatusCodes.Status100Continue), StatusCodes.Status101SwitchingProtocols => _status101SwitchingProtocols ??= new(StatusCodes.Status101SwitchingProtocols), StatusCodes.Status102Processing => _status102Processing ??= new(StatusCodes.Status102Processing), diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 61b6434a7746..16713362a98e 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -90,9 +90,15 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { + if ( statusCode is (< 100) or (> 511)) + { + // No HTTP status code assigned outside the 100..599 range + // so, it will not be available in the cache + return new StatusCodeHttpResult(statusCode); + } + return statusCode switch { - (< 100) or (> 599) => new StatusCodeHttpResult(statusCode), // No HTTP status code assigned outside the 100..599 range <# foreach (var statusCode in statusCodes) { #> StatusCodes.Status<#= statusCode.Name #> => _status<#= statusCode.Name #> ??= new(StatusCodes.Status<#= statusCode.Name #>), <# } #> From 5b264bd74fb0663481ab5141e85b7535a64de211 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 22:30:43 -0700 Subject: [PATCH 10/18] Fixing formatting --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 2 +- src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index 409ad3117ff5..b113b60acca1 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -77,7 +77,7 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { - if ( statusCode is (< 100) or (> 511)) + if (statusCode is (< 100) or (> 511)) { // No HTTP status code assigned outside the 100..599 range // so, it will not be available in the cache diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 16713362a98e..4f22bec0d0e2 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -90,7 +90,7 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { - if ( statusCode is (< 100) or (> 511)) + if (statusCode is (< 100) or (> 511)) { // No HTTP status code assigned outside the 100..599 range // so, it will not be available in the cache From 4eaafaef0b2bfe6b6218e8dc18ff1dec67fc0655 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 22:35:19 -0700 Subject: [PATCH 11/18] Range adjustment --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 2 +- src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index b113b60acca1..c3b67f0beb4b 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -77,7 +77,7 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { - if (statusCode is (< 100) or (> 511)) + if (statusCode is (< 100) or (> 599)) { // No HTTP status code assigned outside the 100..599 range // so, it will not be available in the cache diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 4f22bec0d0e2..4c3ea6cd12cc 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -90,7 +90,7 @@ internal partial class ResultsCache internal static StatusCodeHttpResult StatusCode(int statusCode) { - if (statusCode is (< 100) or (> 511)) + if (statusCode is (< 100) or (> 599)) { // No HTTP status code assigned outside the 100..599 range // so, it will not be available in the cache From 0baebb23a780d3b62301ca5c25e0328b6f24d26a Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 30 Mar 2022 23:25:28 -0700 Subject: [PATCH 12/18] removing template debug flag --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 1 - src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index c3b67f0beb4b..b11f084be2c6 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -7,7 +7,6 @@ namespace Microsoft.AspNetCore.Http; using System.CodeDom.Compiler; -using System.Runtime.CompilerServices; [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class ResultsCache diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 4c3ea6cd12cc..9366d7bfaf64 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -1,4 +1,4 @@ -<#@ template debug="true" hostspecific="true" language="C#" #> +<#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ output extension=".cs" #> <# @@ -79,7 +79,6 @@ namespace Microsoft.AspNetCore.Http; using System.CodeDom.Compiler; -using System.Runtime.CompilerServices; [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class ResultsCache From c363cbc3a3bf7e96d5b0a170d134b242d846dce3 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Mon, 4 Apr 2022 10:06:48 -0700 Subject: [PATCH 13/18] Removing HTTP 100 --- .../src/Microsoft.AspNetCore.Http.Results.csproj | 14 +------------- .../Http.Results/src/ResultsCache.StatusCodes.cs | 2 -- .../Http.Results/src/ResultsCache.StatusCodes.tt | 1 - 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj index c2b6c8fd8a96..f49cbaed9f93 100644 --- a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj +++ b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core types that implement Microsoft.AspNetCore.Http.IResult. @@ -17,11 +17,6 @@ - - True - True - ResultsCache.StatusCodes.tt - @@ -33,13 +28,6 @@ - - - TextTemplatingFileGenerator - ResultsCache.StatusCodes.cs - - - diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index b11f084be2c6..55ea5317926b 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -11,7 +11,6 @@ namespace Microsoft.AspNetCore.Http; [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class ResultsCache { - private static StatusCodeHttpResult? _status100Continue; private static StatusCodeHttpResult? _status101SwitchingProtocols; private static StatusCodeHttpResult? _status102Processing; private static StatusCodeHttpResult? _status200OK; @@ -85,7 +84,6 @@ internal static StatusCodeHttpResult StatusCode(int statusCode) return statusCode switch { - StatusCodes.Status100Continue => _status100Continue ??= new(StatusCodes.Status100Continue), StatusCodes.Status101SwitchingProtocols => _status101SwitchingProtocols ??= new(StatusCodes.Status101SwitchingProtocols), StatusCodes.Status102Processing => _status102Processing ??= new(StatusCodes.Status102Processing), StatusCodes.Status200OK => _status200OK ??= new(StatusCodes.Status200OK), diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 9366d7bfaf64..0b312f9a1d65 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -6,7 +6,6 @@ /// HTTP status codes. var statusCodes = new[] { - new { StatusCode = 100, Name = "100Continue"}, new { StatusCode = 101, Name = "101SwitchingProtocols"}, new { StatusCode = 102, Name = "102Processing"}, new { StatusCode = 200, Name = "200OK"}, From 5982d2393e1ff03fba9c6089dbfd70ab8f20d080 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 6 Apr 2022 17:54:40 -0700 Subject: [PATCH 14/18] Adding unit test for t4 template --- eng/Dependencies.props | 1 + eng/Versions.props | 1 + src/Http/Http.Results/Directory.Build.props | 7 ++++++ .../Microsoft.AspNetCore.Http.Results.csproj | 7 ++++++ ...osoft.AspNetCore.Http.Results.Tests.csproj | 4 ++++ .../Http.Results/test/ResultsCacheTests.cs | 24 +++++++++++++++++++ src/Http/README.md | 7 ++++++ 7 files changed, 51 insertions(+) create mode 100644 src/Http/Http.Results/Directory.Build.props create mode 100644 src/Http/Http.Results/test/ResultsCacheTests.cs diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 51d1105d9e2e..18be2fda9f68 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -189,6 +189,7 @@ and are generated based on the last package release. + diff --git a/eng/Versions.props b/eng/Versions.props index ebe3ba9be3ae..4742d014f5b0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -257,6 +257,7 @@ $(MessagePackVersion) 4.10.0 0.11.2 + 2.2.1 1.0.2 13.0.1 13.0.4 diff --git a/src/Http/Http.Results/Directory.Build.props b/src/Http/Http.Results/Directory.Build.props new file mode 100644 index 000000000000..dcd7ca497754 --- /dev/null +++ b/src/Http/Http.Results/Directory.Build.props @@ -0,0 +1,7 @@ + + + + + $(MSBuildThisFileDirectory)\src + + diff --git a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj index f49cbaed9f93..0d9845104cc4 100644 --- a/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj +++ b/src/Http/Http.Results/src/Microsoft.AspNetCore.Http.Results.csproj @@ -33,4 +33,11 @@ + + + TextTemplatingFileGenerator + ResultsCache.StatusCodes.cs + + + diff --git a/src/Http/Http.Results/test/Microsoft.AspNetCore.Http.Results.Tests.csproj b/src/Http/Http.Results/test/Microsoft.AspNetCore.Http.Results.Tests.csproj index 270acfe04ebb..91c070ef63d9 100644 --- a/src/Http/Http.Results/test/Microsoft.AspNetCore.Http.Results.Tests.csproj +++ b/src/Http/Http.Results/test/Microsoft.AspNetCore.Http.Results.Tests.csproj @@ -8,8 +8,12 @@ + + + + diff --git a/src/Http/Http.Results/test/ResultsCacheTests.cs b/src/Http/Http.Results/test/ResultsCacheTests.cs new file mode 100644 index 000000000000..0e877c76db8b --- /dev/null +++ b/src/Http/Http.Results/test/ResultsCacheTests.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Http.Results.Tests; + +using Mono.TextTemplating; + +public class ResultsCacheTests +{ + [Fact] + public void GeneratedCodeIsUpToData() + { + var currentContentPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "ResultsCache.StatusCodes.cs"); + var templatePath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "ResultsCache.StatusCodes.tt"); + + var generator = new TemplateGenerator(); + var compiledTemplate = generator.CompileTemplate(File.ReadAllText(templatePath)); + + var generatedContent = compiledTemplate.Process(); + var currentContent = File.ReadAllText(currentContentPath); + + Assert.Equal(currentContent, generatedContent); + } +} diff --git a/src/Http/README.md b/src/Http/README.md index e7f09db1a7fb..2d525ccb0b91 100644 --- a/src/Http/README.md +++ b/src/Http/README.md @@ -24,6 +24,13 @@ The following contains a description of each sub-directory in the `Http` directo ## Development Setup +To run the code generation using [T4 Text Templates](https://docs.microsoft.com/en-us/visualstudio/modeling/code-generation-and-t4-text-templates), you can use an IDE that supports it (eg. Visual Studio or JetBrains Rider) or install the cross-platform open-source dotnet tool [Mono/T4](https://github.com/mono/t4). + +```powershell +> dotnet tool install -g dotnet-t4 +> t4 Http.Results\ResultsCache.StatusCodes.cs +``` + ### Build To build this specific project from source, follow the instructions [on building the project](../../docs/BuildFromSource.md#step-3-build-the-repo). From 9cc010772ed9af9b923395377acf40ffb4e0e5ec Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Wed, 6 Apr 2022 21:13:22 -0700 Subject: [PATCH 15/18] Fixing ubuntu test --- src/Http/Http.Results/test/ResultsCacheTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Http.Results/test/ResultsCacheTests.cs b/src/Http/Http.Results/test/ResultsCacheTests.cs index 0e877c76db8b..8fa4b31218ea 100644 --- a/src/Http/Http.Results/test/ResultsCacheTests.cs +++ b/src/Http/Http.Results/test/ResultsCacheTests.cs @@ -10,8 +10,8 @@ public class ResultsCacheTests [Fact] public void GeneratedCodeIsUpToData() { - var currentContentPath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "ResultsCache.StatusCodes.cs"); - var templatePath = Path.Combine(AppContext.BaseDirectory, "shared", "GeneratedContent", "ResultsCache.StatusCodes.tt"); + var currentContentPath = Path.Combine(AppContext.BaseDirectory, "Shared", "GeneratedContent", "ResultsCache.StatusCodes.cs"); + var templatePath = Path.Combine(AppContext.BaseDirectory, "Shared", "GeneratedContent", "ResultsCache.StatusCodes.tt"); var generator = new TemplateGenerator(); var compiledTemplate = generator.CompileTemplate(File.ReadAllText(templatePath)); From 8e20ad1c18f080d8bd036f1fb557ea888a4ebe15 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 7 Apr 2022 06:39:23 -0700 Subject: [PATCH 16/18] Update src/Http/README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Günther Foidl --- src/Http/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/README.md b/src/Http/README.md index 2d525ccb0b91..6d13fcc48ed2 100644 --- a/src/Http/README.md +++ b/src/Http/README.md @@ -28,7 +28,7 @@ To run the code generation using [T4 Text Templates](https://docs.microsoft.com/ ```powershell > dotnet tool install -g dotnet-t4 -> t4 Http.Results\ResultsCache.StatusCodes.cs +> t4 Http.Results\ResultsCache.StatusCodes.tt ``` ### Build From 1c44fad863de34407fb9b2bddcd5464c33ea40b8 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 7 Apr 2022 09:17:08 -0700 Subject: [PATCH 17/18] Update src/Http/Http.Results/test/ResultsCacheTests.cs Co-authored-by: Brennan --- src/Http/Http.Results/test/ResultsCacheTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Http.Results/test/ResultsCacheTests.cs b/src/Http/Http.Results/test/ResultsCacheTests.cs index 8fa4b31218ea..15593f88fdea 100644 --- a/src/Http/Http.Results/test/ResultsCacheTests.cs +++ b/src/Http/Http.Results/test/ResultsCacheTests.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Http.Results.Tests; public class ResultsCacheTests { [Fact] - public void GeneratedCodeIsUpToData() + public void GeneratedCodeIsUpToDate() { var currentContentPath = Path.Combine(AppContext.BaseDirectory, "Shared", "GeneratedContent", "ResultsCache.StatusCodes.cs"); var templatePath = Path.Combine(AppContext.BaseDirectory, "Shared", "GeneratedContent", "ResultsCache.StatusCodes.tt"); From 8e23453f0b5a9adff98d9d16163c1950c09d0f16 Mon Sep 17 00:00:00 2001 From: Bruno Lins de Oliveira Date: Thu, 7 Apr 2022 12:53:52 -0700 Subject: [PATCH 18/18] PR Feedback --- src/Http/Http.Results/src/ResultsCache.StatusCodes.cs | 4 ++-- src/Http/Http.Results/src/ResultsCache.StatusCodes.tt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs index 55ea5317926b..4e255cd9449c 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.cs @@ -4,10 +4,10 @@ #nullable enable -namespace Microsoft.AspNetCore.Http; - using System.CodeDom.Compiler; +namespace Microsoft.AspNetCore.Http; + [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class ResultsCache { diff --git a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt index 0b312f9a1d65..578deef36952 100644 --- a/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt +++ b/src/Http/Http.Results/src/ResultsCache.StatusCodes.tt @@ -75,10 +75,10 @@ #nullable enable -namespace Microsoft.AspNetCore.Http; - using System.CodeDom.Compiler; +namespace Microsoft.AspNetCore.Http; + [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class ResultsCache {