CommonError.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Grpc.Core;
  2. using System;
  3. using Grpc.Extension.Abstract.Model;
  4. using TEAMModelOS.SDK.Extension;
  5. namespace Grpc.Extension.Common
  6. {
  7. /// <summary>
  8. /// 统一错误构建
  9. /// </summary>
  10. public class CommonError
  11. {
  12. /// <summary>
  13. /// 返回一个rpc异常到客户端
  14. /// </summary>
  15. public static RpcException BuildRpcException(Exception ex)
  16. {
  17. if (ex is RpcException)
  18. {
  19. return ex as RpcException;
  20. }
  21. else if (ex.InnerException is RpcException)
  22. {
  23. return ex.InnerException as RpcException;
  24. }
  25. //构建RpcException
  26. var errModel = new ErrorModel
  27. {
  28. Code = ParseCode(ex),
  29. Detail = ex.Message,
  30. Internal = ex.GetFlatException(),
  31. Status = (int)StatusCode.Internal
  32. };
  33. var rpcEx = new RpcException(new Status(StatusCode.Internal, errModel.ToJsonString()));
  34. rpcEx.Data.Add("ErrorCode", errModel.Code);
  35. return rpcEx;
  36. }
  37. private static int ParseCode(Exception ex)
  38. {
  39. try
  40. {
  41. dynamic d = ex.InnerException == null ? ex : ex.InnerException;
  42. var code = d.Code;
  43. return code;
  44. }
  45. catch
  46. {
  47. return GrpcErrorCode.DefaultErrorCode + GrpcErrorCode.Internal;
  48. }
  49. }
  50. }
  51. }