From 01de3552890b7f08270735ffc46a37fe4b129139 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Thu, 2 Jul 2020 09:48:05 +1200 Subject: [PATCH] Don't set StatusCode in WriteAsJsonAsync (#23583) --- .../src/HttpResponseJsonExtensions.cs | 2 -- .../test/HttpResponseJsonExtensionsTests.cs | 34 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs b/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs index a3bfbb6958..ae8e1ed6ca 100644 --- a/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs +++ b/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs @@ -77,7 +77,6 @@ namespace Microsoft.AspNetCore.Http.Json options ??= ResolveSerializerOptions(response.HttpContext); response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset; - response.StatusCode = StatusCodes.Status200OK; return JsonSerializer.SerializeAsync(response.Body, value!, options, cancellationToken); } @@ -150,7 +149,6 @@ namespace Microsoft.AspNetCore.Http.Json options ??= ResolveSerializerOptions(response.HttpContext); response.ContentType = contentType ?? JsonConstants.JsonContentTypeWithCharset; - response.StatusCode = StatusCodes.Status200OK; return JsonSerializer.SerializeAsync(response.Body, value, type, options, cancellationToken); } diff --git a/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs b/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs index 74add9b9e1..be01516515 100644 --- a/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs +++ b/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs @@ -88,6 +88,23 @@ namespace Microsoft.AspNetCore.Http.Extensions.Tests } } + [Fact] + public async Task WriteAsJsonAsyncGeneric_CustomStatusCode_StatusCodeUnchanged() + { + // Arrange + var body = new MemoryStream(); + var context = new DefaultHttpContext(); + context.Response.Body = body; + + // Act + context.Response.StatusCode = StatusCodes.Status418ImATeapot; + await context.Response.WriteAsJsonAsync(1); + + // Assert + Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType); + Assert.Equal(StatusCodes.Status418ImATeapot, context.Response.StatusCode); + } + [Fact] public async Task WriteAsJsonAsyncGeneric_WithContentType_JsonResponseWithCustomContentType() { @@ -223,6 +240,23 @@ namespace Microsoft.AspNetCore.Http.Extensions.Tests Assert.Equal(@"{""stringProperty"":""激光這兩個字是甚麼意思""}", data); } + [Fact] + public async Task WriteAsJsonAsync_CustomStatusCode_StatusCodeUnchanged() + { + // Arrange + var body = new MemoryStream(); + var context = new DefaultHttpContext(); + context.Response.Body = body; + + // Act + context.Response.StatusCode = StatusCodes.Status418ImATeapot; + await context.Response.WriteAsJsonAsync(1, typeof(int)); + + // Assert + Assert.Equal(JsonConstants.JsonContentTypeWithCharset, context.Response.ContentType); + Assert.Equal(StatusCodes.Status418ImATeapot, context.Response.StatusCode); + } + public class TestObject { public string? StringProperty { get; set; }