CommonError.cs 1.4 KB

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