diff --git a/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs b/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs index a3bfbb695814..ae8e1ed6ca3a 100644 --- a/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs +++ b/src/Http/Http.Extensions/src/HttpResponseJsonExtensions.cs @@ -77,7 +77,6 @@ public static Task WriteAsJsonAsync( 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 @@ public static Task WriteAsJsonAsync( 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 74add9b9e1ec..be015165157a 100644 --- a/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs +++ b/src/Http/Http.Extensions/test/HttpResponseJsonExtensionsTests.cs @@ -88,6 +88,23 @@ public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptio } } + [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 @@ public async Task WriteAsJsonAsync_ObjectWithStrings_CamcelCaseAndNotEscaped() 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; }