using Grpc.Core; using System; using Grpc.Extension.Abstract.Model; using TEAMModelOS.SDK.Extension; namespace Grpc.Extension.Common { /// /// 统一错误构建 /// public class CommonError { /// /// 返回一个rpc异常到客户端 /// public static RpcException BuildRpcException(Exception ex) { if (ex is RpcException) { return ex as RpcException; } else if (ex.InnerException is RpcException) { return ex.InnerException as RpcException; } //构建RpcException var errModel = new ErrorModel { Code = ParseCode(ex), Detail = ex.Message, Internal = ex.GetFlatException(), Status = (int)StatusCode.Internal }; var rpcEx = new RpcException(new Status(StatusCode.Internal, errModel.ToJsonString())); rpcEx.Data.Add("ErrorCode", errModel.Code); return rpcEx; } private static int ParseCode(Exception ex) { try { dynamic d = ex.InnerException == null ? ex : ex.InnerException; var code = d.Code; return code; } catch { return GrpcErrorCode.DefaultErrorCode + GrpcErrorCode.Internal; } } } }