Skip to content

Commit 7d8c620

Browse files
committed
Refactor to use the built-in HttpMethods extension methods, which are case-insensitive
1 parent 249ed6f commit 7d8c620

4 files changed

Lines changed: 13 additions & 11 deletions

File tree

src/JsonApiDotNetCore.OpenApi.Swashbuckle/JsonApiMetadata/JsonApiEndpointMetadataProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using JsonApiDotNetCore.OpenApi.Swashbuckle.JsonApiMetadata.Documents;
99
using JsonApiDotNetCore.OpenApi.Swashbuckle.JsonApiObjects.Documents;
1010
using JsonApiDotNetCore.Resources.Annotations;
11+
using Microsoft.AspNetCore.Http;
1112
using Microsoft.AspNetCore.Http.Metadata;
1213
using Microsoft.AspNetCore.Mvc;
1314
using Microsoft.AspNetCore.Mvc.Abstractions;
@@ -280,7 +281,7 @@ private JsonApiEndpointMetadata GetCustomMetadata(ActionDescriptor descriptor, R
280281
ConsistencyGuard.ThrowIf(actionMethod == null);
281282

282283
HashSet<string> httpMethods = actionMethod.GetCustomAttributes<HttpMethodAttribute>(true).SelectMany(httpMethod => httpMethod.HttpMethods).ToHashSet();
283-
bool skipHasOneAtRelationshipEndpoint = httpMethods.Contains("POST") || httpMethods.Contains("DELETE");
284+
bool skipHasOneAtRelationshipEndpoint = httpMethods.Any(httpMethod => HttpMethods.IsPost(httpMethod) || HttpMethods.IsDelete(httpMethod));
284285

285286
IJsonApiRequestMetadata? requestMetadata = GetCustomRequestMetadata(descriptor, controllerResourceType, hasParameterForId,
286287
hasParameterForRelationshipName, skipHasOneAtRelationshipEndpoint);

src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr
134134
{
135135
AssertNoAtomicOperationsExtension(extensions);
136136

137-
request.IsReadOnly = httpRequest.Method == HttpMethod.Get.Method || httpRequest.Method == HttpMethod.Head.Method;
137+
request.IsReadOnly = HttpMethods.IsGet(httpRequest.Method) || HttpMethods.IsHead(httpRequest.Method);
138138
request.PrimaryResourceType = primaryResourceType;
139139
request.PrimaryId = GetPrimaryRequestId(routeValues);
140140

@@ -148,9 +148,9 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr
148148
// @formatter:keep_existing_linebreaks true
149149

150150
request.WriteOperation =
151-
httpRequest.Method == HttpMethod.Post.Method ? WriteOperationKind.AddToRelationship :
152-
httpRequest.Method == HttpMethod.Patch.Method ? WriteOperationKind.SetRelationship :
153-
httpRequest.Method == HttpMethod.Delete.Method ? WriteOperationKind.RemoveFromRelationship : null;
151+
HttpMethods.IsPost(httpRequest.Method) ? WriteOperationKind.AddToRelationship :
152+
HttpMethods.IsPatch(httpRequest.Method) ? WriteOperationKind.SetRelationship :
153+
HttpMethods.IsDelete(httpRequest.Method) ? WriteOperationKind.RemoveFromRelationship : null;
154154

155155
// @formatter:keep_existing_linebreaks restore
156156
// @formatter:wrap_chained_method_calls restore
@@ -171,9 +171,9 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr
171171
// @formatter:keep_existing_linebreaks true
172172

173173
request.WriteOperation =
174-
httpRequest.Method == HttpMethod.Post.Method ? WriteOperationKind.CreateResource :
175-
httpRequest.Method == HttpMethod.Patch.Method ? WriteOperationKind.UpdateResource :
176-
httpRequest.Method == HttpMethod.Delete.Method ? WriteOperationKind.DeleteResource : null;
174+
HttpMethods.IsPost(httpRequest.Method) ? WriteOperationKind.CreateResource :
175+
HttpMethods.IsPatch(httpRequest.Method) ? WriteOperationKind.UpdateResource :
176+
HttpMethods.IsDelete(httpRequest.Method) ? WriteOperationKind.DeleteResource : null;
177177

178178
// @formatter:keep_existing_linebreaks restore
179179
// @formatter:wrap_chained_method_calls restore

src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public async Task WriteAsync(object? model, HttpContext httpContext)
5757

5858
string? responseBody = GetResponseBody(model, httpContext);
5959

60-
if (httpContext.Request.Method == HttpMethod.Head.Method)
60+
if (HttpMethods.IsHead(httpContext.Request.Method))
6161
{
6262
httpContext.Response.GetTypedHeaders().ContentLength = responseBody == null ? 0 : Encoding.UTF8.GetByteCount(responseBody);
6363
return;
@@ -136,7 +136,7 @@ private string SerializeDocument(Document document)
136136

137137
private bool SetETagResponseHeader(HttpRequest request, HttpResponse response, string responseContent)
138138
{
139-
bool isReadOnly = request.Method == HttpMethod.Get.Method || request.Method == HttpMethod.Head.Method;
139+
bool isReadOnly = HttpMethods.IsGet(request.Method) || HttpMethods.IsHead(request.Method);
140140

141141
if (isReadOnly && response.StatusCode == (int)HttpStatusCode.OK)
142142
{

test/OpenApiNSwagEndToEndTests/MixedControllers/GeneratedCode/MixedControllersClient.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text;
2+
using Microsoft.AspNetCore.Http;
23

34
// Justification: The CA1852 analyzer doesn't take auto-generated code into account, presumably for improved performance.
45
#pragma warning disable CA1852 // Type can be sealed because it has no subtypes in its containing assembly and is not externally visible
@@ -10,7 +11,7 @@ internal partial class MixedControllersClient
1011
// ReSharper disable once UnusedParameterInPartialMethod
1112
partial void PrepareRequest(HttpClient client, HttpRequestMessage request, StringBuilder urlBuilder)
1213
{
13-
if (request.Method == HttpMethod.Patch && urlBuilder.ToString().EndsWith("/cupOfCoffees/batch", StringComparison.Ordinal))
14+
if (HttpMethods.IsPatch(request.Method.Method) && urlBuilder.ToString().EndsWith("/cupOfCoffees/batch", StringComparison.Ordinal))
1415
{
1516
// Workaround: NSwag assumes a PATCH request must always send a request body, despite our OpenAPI document not specifying one.
1617
request.Content = null;

0 commit comments

Comments
 (0)