WebApi在这里就不多说了,一种轻量级的服务,应用非常广泛。我这这里主要记录下有关 WebApi的相关知识,以便日后使用。
当WebApi应用程序出现异常时,我们都会使用到异常过滤器进行日志记录,并在Global全局文件中注册,过滤器是一种AOP设计思想,即面向切面编程,其跟主业务无关,可以减少项目中的代码量以及降低各模块之间的耦合度。首先是ExceptionFilterAttribute抽象类,重写其中的OnException方法去自定义自己的异常过滤器。直接上代码。
/// <summary> /// 自定义程序异常过滤器 /// </summary> public class CustomExceptionFilterAttribute : ExceptionFilterAttribute { /// <summary> /// NLog日志记录 /// </summary> private static Logger logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); /// <summary> /// 异常处理 /// </summary> /// <param name="context"></param> public override void OnException(HttpActionExecutedContext context) { var ex = context.Exception.InnerException == null ? context.Exception : context.Exception.InnerException; //记录日志错误信息 logger.Error($"{context.ActionContext.ControllerContext.ControllerDescriptor.ControllerType.FullName}." + $"{context.ActionContext.ActionDescriptor.ActionName}{Environment.NewLine}" + $"Arguments: {JsonConvert.SerializeObject(context.ActionContext.ActionArguments)}{Environment.NewLine}" + $"Message:{ex.ToString()}{Environment.NewLine}"); //返回客户端异常信息 context.Response = context.Request.CreateResponse(HttpStatusCode.OK,new WebApiFitlerResult() { code = WebApiFitlerResult.CodeEnumType.程序异常, msg = ex.Message }); } }