From 4b9608e5840a6937cc33e0f54d4aaf486776093a Mon Sep 17 00:00:00 2001 From: Lonze Date: Mon, 9 Nov 2020 17:25:48 +0800 Subject: [PATCH 1/2] Update AbpNoContentActionFilter with unit test --- .../Mvc/Response/AbpNoContentActionFilter.cs | 3 ++- .../Mvc/Response/NoContentTestController.cs | 8 ++++++++ .../Response/NoContentTestController_Tests.cs | 8 ++++++++ .../Mvc/Response/TestResultFilter.cs | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs index b6d56b2f2a..2b38c4d484 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs @@ -18,7 +18,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Response await next(); - if (context.HttpContext.Response.StatusCode == (int)HttpStatusCode.OK) + if (context.HttpContext.Response.StatusCode == (int)HttpStatusCode.OK + && context.Result == null) { var returnType = context.ActionDescriptor.GetReturnType(); if (returnType == typeof(Task) || returnType == typeof(void)) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs index dc0ae30d71..9f8e431d51 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs @@ -47,5 +47,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Response Response.Redirect("/"); await Task.CompletedTask; } + + [HttpGet] + [Route("TestAsyncMethodWithResultFilter")] + [TestResultFilter] + public async Task TestAsyncMethodWithResultFilter() + { + await Task.CompletedTask; + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs index 0002a4801b..dd100fb2e1 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs @@ -54,5 +54,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Response ; result.StatusCode.ShouldBe(HttpStatusCode.Redirect); } + + [Fact] + public async Task Should_Not_Set_No_Content_For_Custom_Result_Filter_Async_Action() + { + var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithResultFilter") + ; + result.StatusCode.ShouldBe(HttpStatusCode.OK); + } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs new file mode 100644 index 0000000000..8cbbbc4399 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Abstractions; +using Microsoft.AspNetCore.Mvc.Filters; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.Response +{ + public class TestResultFilter : Attribute, IAsyncActionFilter + { + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + await next(); + context.Result = new ObjectResult("TestResultFilter"); + } + } +} From 0a1dd5e9910878d7847e8695d4998ce8930c998a Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 10 Nov 2020 09:26:05 +0800 Subject: [PATCH 2/2] Update NoContentTestController_Tests.cs --- .../Response/NoContentTestController_Tests.cs | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs index dd100fb2e1..b11a185d68 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs @@ -10,56 +10,49 @@ namespace Volo.Abp.AspNetCore.Mvc.Response [Fact] public async Task Should_Set_No_Content_For_Void_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestMethod", HttpStatusCode.NoContent) - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestMethod", HttpStatusCode.NoContent); result.StatusCode.ShouldBe(HttpStatusCode.NoContent); } [Fact] public async Task Should_Not_Set_No_Content_For_Not_Void_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestMethodWithReturn") - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestMethodWithReturn"); result.StatusCode.ShouldBe(HttpStatusCode.OK); } [Fact] public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestCustomHttpStatusCodeMethod", HttpStatusCode.Redirect); result.StatusCode.ShouldBe(HttpStatusCode.Redirect); } [Fact] public async Task Should_Set_No_Content_For_Task_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethod", HttpStatusCode.NoContent) - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethod", HttpStatusCode.NoContent); result.StatusCode.ShouldBe(HttpStatusCode.NoContent); } [Fact] public async Task Should_Not_Set_No_Content_For_Not_Task_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithReturn") - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithReturn"); result.StatusCode.ShouldBe(HttpStatusCode.OK); } [Fact] public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Async_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncCustomHttpStatusCodeMethod", HttpStatusCode.Redirect); result.StatusCode.ShouldBe(HttpStatusCode.Redirect); } [Fact] public async Task Should_Not_Set_No_Content_For_Custom_Result_Filter_Async_Action() { - var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithResultFilter") - ; + var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithResultFilter"); result.StatusCode.ShouldBe(HttpStatusCode.OK); } }