using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collections.Generic; using System.Reflection; using System.Text; namespace Shentun.WebApi.Service { public class WebApiActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext context) { //Console.WriteLine("WebApiActionFilter.OnActionExecuted"); if (context.Result != null) { if (context.Result is ObjectResult) { var result = context.Result as ObjectResult; if (!(result is IReturnValue)) { if (result.StatusCode == StatusCodes.Status404NotFound) { context.Result = new OkObjectResult(ReturnValue.CreateNotFoundInstance()); } else if(result.StatusCode != StatusCodes.Status200OK && result.StatusCode!=null) { context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance(result.Value.ToString())); } else { context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance(result.Value)); } } } else if (context.Result is EmptyResult) { context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance()); } else if (context.Result is ContentResult) { var result = context.Result as ContentResult; context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance(result.Content)); } else if (context.Result is BadRequestResult) { var result = context.Result as BadRequestResult; context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance("BadRequestResult")); } else if (context.Result is NoContentResult) { var result = context.Result as NoContentResult; context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance("NoContentResult")); } else if (context.Result is NotFoundResult) { var result = context.Result as NotFoundResult; context.Result = new OkObjectResult(ReturnValue.CreateNotFoundInstance()); } else if (context.Result is FileStreamResult) { //直接返回 //var result = context.Result as FileStreamResult; //context.Result = new OkObjectResult(result); } else if (context.Result is FileContentResult) { //直接返回 //var result = context.Result as FileContentResult; //context.Result = new OkObjectResult(result); } else { //context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance(context.Result)); //throw new Exception($"未经处理的Result类型:{ context.Result.GetType().Name}"); } } base.OnActionExecuted(context); } public override void OnActionExecuting(ActionExecutingContext context) { //Console.WriteLine("WebApiActionFilter.OnActionExecuting"); //context.Result = ReturnValue.CreateSuccessReturnValue(context.Result) } public override void OnResultExecuting(ResultExecutingContext context) { //Console.WriteLine("WebApiActionFilter.OnResultExecuting"); } public override void OnResultExecuted(ResultExecutedContext context) { //Console.WriteLine("WebApiActionFilter.OnResultExecuted"); } } }