You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
4.2 KiB

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Reflection;
  7. using System.Text;
  8. namespace Shentun.WebApi.Service
  9. {
  10. public class WebApiActionFilterAttribute : ActionFilterAttribute
  11. {
  12. public override void OnActionExecuted(ActionExecutedContext context)
  13. {
  14. //Console.WriteLine("WebApiActionFilter.OnActionExecuted");
  15. if (context.Result != null)
  16. {
  17. if (context.Result is ObjectResult)
  18. {
  19. var result = context.Result as ObjectResult;
  20. if (!(result is IReturnValue))
  21. {
  22. if (result.StatusCode == StatusCodes.Status404NotFound)
  23. {
  24. context.Result = new OkObjectResult(ReturnValue.CreateNotFoundInstance());
  25. }
  26. else if(result.StatusCode != StatusCodes.Status200OK && result.StatusCode!=null)
  27. {
  28. context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance(result.Value.ToString()));
  29. }
  30. else
  31. {
  32. context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance(result.Value));
  33. }
  34. }
  35. }
  36. else if (context.Result is EmptyResult)
  37. {
  38. context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance());
  39. }
  40. else if (context.Result is ContentResult)
  41. {
  42. var result = context.Result as ContentResult;
  43. context.Result = new OkObjectResult(ReturnValue.CreateSuccessInstance(result.Content));
  44. }
  45. else if (context.Result is BadRequestResult)
  46. {
  47. var result = context.Result as BadRequestResult;
  48. context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance("BadRequestResult"));
  49. }
  50. else if (context.Result is NoContentResult)
  51. {
  52. var result = context.Result as NoContentResult;
  53. context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance("NoContentResult"));
  54. }
  55. else if (context.Result is NotFoundResult)
  56. {
  57. var result = context.Result as NotFoundResult;
  58. context.Result = new OkObjectResult(ReturnValue.CreateNotFoundInstance());
  59. }
  60. else if (context.Result is FileStreamResult)
  61. {
  62. //直接返回
  63. //var result = context.Result as FileStreamResult;
  64. //context.Result = new OkObjectResult(result);
  65. }
  66. else if (context.Result is FileContentResult)
  67. {
  68. //直接返回
  69. //var result = context.Result as FileContentResult;
  70. //context.Result = new OkObjectResult(result);
  71. }
  72. else
  73. {
  74. //context.Result = new OkObjectResult(ReturnValue.CreateErrorInstance(context.Result));
  75. //throw new Exception($"未经处理的Result类型:{ context.Result.GetType().Name}");
  76. }
  77. }
  78. base.OnActionExecuted(context);
  79. }
  80. public override void OnActionExecuting(ActionExecutingContext context)
  81. {
  82. //Console.WriteLine("WebApiActionFilter.OnActionExecuting");
  83. //context.Result = ReturnValue<context.Result>.CreateSuccessReturnValue(context.Result)
  84. }
  85. public override void OnResultExecuting(ResultExecutingContext context)
  86. {
  87. //Console.WriteLine("WebApiActionFilter.OnResultExecuting");
  88. }
  89. public override void OnResultExecuted(ResultExecutedContext context)
  90. {
  91. //Console.WriteLine("WebApiActionFilter.OnResultExecuted");
  92. }
  93. }
  94. }