ActionFilter

一些比较常用的操作

public class MyFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {
    }

    public void OnActionExecuting(ActionExecutingContext context)
    { 
         try
        {
            //如果已经登陆上去才进行验证
            if (!context.HttpContext.User.Identity.IsAuthenticated) { throw new Exception("未登陆"); }
            if (context.ActionArguments.Count <= 0 || !context.ActionArguments.ContainsKey("args")) { throw new Exception("参数不存在"); }
            var communityArgsModel = context.ActionArguments["args"] as ICommunityArgsModel;
            if (communityArgsModel == null) { throw new Exception("不是ICommunityArgsModel类型"); }
            
        }
        catch (Exception ex)
        {
            // 可以直接返回
            context.Result = new Microsoft.AspNetCore.Mvc.JsonResult(APIResult.CreateError<string>(0,ex.Message));
            return;
        }
    }
}

处理抛出的异常

public class OutputJsonErrorFilter : IActionFilter
{
    private readonly ILogger logger;
    public OutputJsonErrorFilter(ILoggerFactory loggerFactory)
    {
        this.logger = loggerFactory.CreateLogger<OutputJsonErrorFilter>();
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        if (!context.ExceptionHandled && context.Exception != null)
        {
            var error = context.Exception.Message;
            var e = context.Exception;

            logger.LogError(e, "ApiControllerBase Error");

            while (e.InnerException != null)
            {
                e = e.InnerException;
                error += "|" + e.Message;
            }

            context.Result = new JsonResult(APIResult.CreateError(0, error));
            context.ExceptionHandled = true;
        }
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
            
    }
}