Skip to content

统一异常处理

Henry edited this page Sep 10, 2019 · 2 revisions

当存在大量方法的时候,如果每一个都单独处理异常,那是一件相当繁琐的工作。组件可以基于过虑器来实现统一异常处理和响应,实现起来也非常简单。

制定异常过虑器

    public class CatchException : FilterAttribute
    {
        public override void Executed(ActionContext context)
        {
            base.Executed(context);
            if (context.Exception != null)
            {
                context.Result = new TextResult(context.Exception.Message);
                context.Exception = null;
            }
        }
    }

实现Executed方法,判断当前处理上下是否存在异常,如果存在则返回自定义的IResult,并把上下文的异常清空,如果不清空组件会对外抛InnerErroResult

设置全局

mApiServer.ServerConfig.Filters.Add(new CatehException());
mApiServer.Register(typeof(Program).Assembly);

添加全局过虑器,必须在注册控制器前添加。

测试

        public void Throw()
        {
            throw new Exception("hello");
        }

以上方法是抛出一个异常,经过过虑器处理后响应结果是: