异常抽象:有异常码 IHasErrorCode:异常内容,IHasErrorDetails:对用户友好的IUserFriendlyException:IBusinessException(也有用户自定义Code、Details),IHasLogLevel级别:默认是Warning
对Exception的包装,基类需要的是SerializationInfo、StreamingContext以及message、innerException
UserFriendlyException是展示用户的,其它还有AbpAuthorizationException(403、401),AbpValidationException(400),EntityNotFoundException(404)、IBusinessException(401),AggregateException
ApplicationBuilder处理AbpExceptionHandlingMiddleware,它在IApplicationBuilder.Properties设置了_AbpExceptionHandlingMiddleware_Added,只增加一次,全局性的
对于所有都是适用的,并不是每一次访问都执行。
它对HttpContext.Item["_AbpActionInfo"]是Object的话,对对象序列化进行都是包装,它要转换异常内容,、序列化操作
异常码查找:可根据自定义的IHasErrorCode,映射成HttpStatusCode,若没有根据相应的Exception默认的HttpStatusCode,否则505错误
将异常转换成RemoteServiceErrorResponse,责任是DefaultExceptionToErrorInfoConverter,ITransientDependency类型
默认是不把所有详细异常给客户端,涉及RemoteServiceErrorInfo本地化,各种类型的Message、Code、Details赋值
详细异常是将包括UserFriendlyException、AbpValidationException、StackTrace、Inner exception逐行抛出
应用类,要经常MVC的,在AbpExceptionFilter出现,同样处理抛出异常