Browse Source

fix(wrapper): fixed invalid wrapper IsEnabled option

pull/443/head
cKey 4 years ago
parent
commit
531e281349
  1. 3
      aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Filters/AbpWrapResultFilter.cs
  2. 6
      aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/WrapResultChecker.cs
  3. 16
      aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Wraping/EmptyActionResultWrapper.cs
  4. 7
      aspnet-core/tests/LINGYUN.Abp.AspNetCore.Mvc.Tests/LINGYUN/Abp/AspNetCore/Mvc/Results/WrapResultController.cs
  5. 10
      aspnet-core/tests/LINGYUN.Abp.AspNetCore.Mvc.Tests/LINGYUN/Abp/AspNetCore/Mvc/Results/WrapResultController_Tests.cs
  6. 12
      aspnet-core/tests/LINGYUN.Abp.AspNetCore.Tests/LINGYUN/Abp/AspNetCore/AbpAspNetCoreTestBase.cs

3
aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Filters/AbpWrapResultFilter.cs

@ -1,6 +1,7 @@
using LINGYUN.Abp.AspNetCore.Mvc.Wrapper.Wraping; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper.Wraping;
using LINGYUN.Abp.Wrapper; using LINGYUN.Abp.Wrapper;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Options;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -28,9 +29,11 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Wrapper.Filters
protected virtual Task HandleAndWrapResult(ResultExecutingContext context) protected virtual Task HandleAndWrapResult(ResultExecutingContext context)
{ {
var options = context.GetRequiredService<IOptions<AbpWrapperOptions>>().Value;
var actionResultWrapperFactory = context.GetRequiredService<IActionResultWrapperFactory>(); var actionResultWrapperFactory = context.GetRequiredService<IActionResultWrapperFactory>();
actionResultWrapperFactory.CreateFor(context).Wrap(context); actionResultWrapperFactory.CreateFor(context).Wrap(context);
context.HttpContext.Response.Headers.Add(AbpHttpWrapConsts.AbpWrapResult, "true"); context.HttpContext.Response.Headers.Add(AbpHttpWrapConsts.AbpWrapResult, "true");
context.HttpContext.Response.StatusCode = (int)options.HttpStatusCode;
return Task.CompletedTask; return Task.CompletedTask;
} }

6
aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/WrapResultChecker.cs

@ -6,7 +6,6 @@ using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System; using System;
using System.Linq; using System.Linq;
using System.Reflection;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -44,6 +43,11 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Wrapper
protected virtual bool CheckForBase(FilterContext context) protected virtual bool CheckForBase(FilterContext context)
{ {
if (!Options.IsEnabled)
{
return false;
}
if (context.HttpContext.Request.Headers.ContainsKey(AbpHttpWrapConsts.AbpDontWrapResult)) if (context.HttpContext.Request.Headers.ContainsKey(AbpHttpWrapConsts.AbpDontWrapResult))
{ {
return false; return false;

16
aspnet-core/modules/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Wraping/EmptyActionResultWrapper.cs

@ -11,18 +11,30 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Wrapper.Wraping
public void Wrap(FilterContext context) public void Wrap(FilterContext context)
{ {
var options = context.GetRequiredService<IOptions<AbpWrapperOptions>>().Value; var options = context.GetRequiredService<IOptions<AbpWrapperOptions>>().Value;
var code = options.CodeWithEmptyResult(context.HttpContext.RequestServices);
var message = options.MessageWithEmptyResult(context.HttpContext.RequestServices);
switch (context) switch (context)
{ {
case ResultExecutingContext resultExecutingContext: case ResultExecutingContext resultExecutingContext:
if (options.ErrorWithEmptyResult)
{
var code = options.CodeWithEmptyResult(context.HttpContext.RequestServices);
var message = options.MessageWithEmptyResult(context.HttpContext.RequestServices);
resultExecutingContext.Result = new ObjectResult(new WrapResult(code, message)); resultExecutingContext.Result = new ObjectResult(new WrapResult(code, message));
return; return;
}
resultExecutingContext.Result = new ObjectResult(new WrapResult(options.CodeWithSuccess, result: null));
return;
case PageHandlerExecutedContext pageHandlerExecutedContext: case PageHandlerExecutedContext pageHandlerExecutedContext:
if (options.ErrorWithEmptyResult)
{
var code = options.CodeWithEmptyResult(context.HttpContext.RequestServices);
var message = options.MessageWithEmptyResult(context.HttpContext.RequestServices);
pageHandlerExecutedContext.Result = new ObjectResult(new WrapResult(code, message)); pageHandlerExecutedContext.Result = new ObjectResult(new WrapResult(code, message));
return; return;
} }
pageHandlerExecutedContext.Result = new ObjectResult(new WrapResult(options.CodeWithSuccess, result: null));
return;
}
} }
} }
} }

7
aspnet-core/tests/LINGYUN.Abp.AspNetCore.Mvc.Tests/LINGYUN/Abp/AspNetCore/Mvc/Results/WrapResultController.cs

@ -90,5 +90,12 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Results
{ {
throw new HasDbException(); throw new HasDbException();
} }
[HttpPut]
[Route("not-wrap-204")]
public Task NotWrapWith204()
{
return Task.CompletedTask;
}
} }
} }

10
aspnet-core/tests/LINGYUN.Abp.AspNetCore.Mvc.Tests/LINGYUN/Abp/AspNetCore/Mvc/Results/WrapResultController_Tests.cs

@ -1,5 +1,6 @@
using LINGYUN.Abp.Wrapper; using LINGYUN.Abp.Wrapper;
using Shouldly; using Shouldly;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.Http; using Volo.Abp.Http;
@ -115,5 +116,14 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Results
result.ShouldNotBeNull(); result.ShouldNotBeNull();
result.Name.ShouldBe("Not Wrap"); result.Name.ShouldBe("Not Wrap");
} }
[Fact]
public async Task Should_Return_Not_Wrap_Result_For_Response_204()
{
var result = await GetResponseAsObjectAsync<WrapResult>("/api/wrap-result-test/not-wrap-204", System.Net.HttpStatusCode.OK, method: HttpMethod.Put);
result.ShouldNotBeNull();
result.Code.ShouldBe("0");
result.Result.ShouldBeNull();
}
} }
} }

12
aspnet-core/tests/LINGYUN.Abp.AspNetCore.Tests/LINGYUN/Abp/AspNetCore/AbpAspNetCoreTestBase.cs

@ -26,23 +26,23 @@ namespace LINGYUN.Abp.AspNetCore
RequestHeaders = new Dictionary<string, string>(); RequestHeaders = new Dictionary<string, string>();
} }
protected virtual async Task<T> GetResponseAsObjectAsync<T>(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false) protected virtual async Task<T> GetResponseAsObjectAsync<T>(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false, HttpMethod method = null)
{ {
var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode, xmlHttpRequest); var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode, xmlHttpRequest, method);
return JsonSerializer.Deserialize<T>(strResponse, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); return JsonSerializer.Deserialize<T>(strResponse, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
} }
protected virtual async Task<string> GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false) protected virtual async Task<string> GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false, HttpMethod method = null)
{ {
using (var response = await GetResponseAsync(url, expectedStatusCode, xmlHttpRequest)) using (var response = await GetResponseAsync(url, expectedStatusCode, xmlHttpRequest, method))
{ {
return await response.Content.ReadAsStringAsync(); return await response.Content.ReadAsStringAsync();
} }
} }
protected virtual async Task<HttpResponseMessage> GetResponseAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false) protected virtual async Task<HttpResponseMessage> GetResponseAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK, bool xmlHttpRequest = false, HttpMethod method = null)
{ {
using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url)) using (var requestMessage = new HttpRequestMessage(method ?? HttpMethod.Get, url))
{ {
requestMessage.Headers.Add("Accept-Language", CultureInfo.CurrentUICulture.Name); requestMessage.Headers.Add("Accept-Language", CultureInfo.CurrentUICulture.Name);
if (xmlHttpRequest) if (xmlHttpRequest)

Loading…
Cancel
Save