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

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<context.Result>.CreateSuccessReturnValue(context.Result)
}
public override void OnResultExecuting(ResultExecutingContext context)
{
//Console.WriteLine("WebApiActionFilter.OnResultExecuting");
}
public override void OnResultExecuted(ResultExecutedContext context)
{
//Console.WriteLine("WebApiActionFilter.OnResultExecuted");
}
}
}