一些比较常用的操作
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)
{
}
}