如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?
生活随笔
收集整理的這篇文章主要介紹了
如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
咨詢區
Dmitriy
我在 ASP.NET Core 中使用 GRPC.ASPNETCore 工具包寫 gRPC 服務,現在我想實現 gRPC 的異常全局攔截,我的代碼如下:
app.UseExceptionHandler(configure?=> {configure.Run(async?e?=>{Console.WriteLine("Exception?test?code");}); });然后注入到 ServiceCollection 容器中。
services.AddMvc(options?=> {options.Filters.Add(typeof(BaseExceptionFilter)); });奇怪的是,這段代碼并不能實現攔截功能,我是真的不想讓 try-catch 包裹所有的辦法,太痛苦了。
回答區
valentasm
你可以給 gRPC 添加一個自定義攔截器,先看一下類定義。
using?System; using?System.Collections.Generic; using?System.Linq; using?System.Threading.Tasks; using?Grpc.Core; using?Grpc.Core.Interceptors; using?Microsoft.Extensions.Logging;namespace?Systemx.WebService.Services {public?class?ServerLoggerInterceptor?:?Interceptor{private?readonly?ILogger<ServerLoggerInterceptor>?_logger;public?ServerLoggerInterceptor(ILogger<ServerLoggerInterceptor>?logger){_logger?=?logger;}public?override?async?Task<TResponse>?UnaryServerHandler<TRequest,?TResponse>(TRequest?request,ServerCallContext?context,UnaryServerMethod<TRequest,?TResponse>?continuation){//LogCall<TRequest,?TResponse>(MethodType.Unary,?context);try{return?await?continuation(request,?context);}catch?(Exception?ex){//?Note:?The?gRPC?framework?also?logs?exceptions?thrown?by?handlers?to?.NET?Core?logging._logger.LogError(ex,?$"Error?thrown?by?{context.Method}.");????????????????throw;}}} }接下來就可以在 Startup 中通過 AddGrpc 注入啦。
services.AddGrpc(options?=> {{options.Interceptors.Add<ServerLoggerInterceptor>();options.EnableDetailedErrors?=?true;} });點評區
grpc 早已經替代 wcf 成功一種基于tcp的跨機器通訊技術,看得出 grpc 和 asp.net core 集成越來越好,是得需要大家花費精力好好學習。
總結
以上是生活随笔為你收集整理的如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CALL FOR DUTY 来和我们一起
- 下一篇: .NET 程序测试 Java 项目 lo