1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using Grpc.Core;
- using System;
- using Grpc.Extension.Abstract.Model;
- using TEAMModelOS.SDK.Extension;
- namespace Grpc.Extension.Common
- {
- /// <summary>
- /// 统一错误构建
- /// </summary>
- public class CommonError
- {
- /// <summary>
- /// 返回一个rpc异常到客户端
- /// </summary>
- 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;
- }
- }
- }
- }
|