咨询区

  • 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 服务添加全局异常处理 ?相关推荐

  1. 如何在ASP.Net Core中使用辅助服务

    ASP.Net Core 3.0 Preview 3添加了对创建工作程序服务的支持,这些工作程序是诸如Windows服务和Linux守护程序之类的后台服务. 还有一个用于在Visual Studio中 ...

  2. 如何在.NET Core中为gRPC服务设计消息文件(Proto)

    如何在.NET Core中为gRPC服务设计消息 使用协议缓冲区规范定义gRPC服务非常容易,但从需求转换为.NET Core,然后管理服务的演变时,需要注意几件事. 创建gRPC服务的核心是.pro ...

  3. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  4. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  5. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  6. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  7. 如何在 ASP.Net Core 中对接 WCF

    在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...

  8. 如何在 ASP.Net Core 中使用 NCache

    虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...

  9. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

最新文章

  1. Android 利用方向传感器实现 指南针
  2. java如何计算html高度,如何检索HTML元素的实际宽度和高度?
  3. Python实现一个简单数据库查询接口编写
  4. python语言里数字包括_4.1Python语言中的数字、字符串数据类型讲解
  5. LeetCode 2116. 判断一个括号字符串是否有效(栈)
  6. LeetCode 379. 电话目录管理系统(哈希set)
  7. metinfo mysql_Metinfo 5.3.17 前台SQL注入漏洞
  8. (转)goldengate 复制进程replicat出现ORA-01403 错误
  9. windows Azure平台开发
  10. JavaScript生成树形菜单(递归算法)
  11. java怎么设计一个系统吗_谁能帮我设计一个Java的文件管理系统谢谢各位
  12. 关于一些初级ACM竞赛题目的分析和题解(九)
  13. 手把手系列--华邦W25Q64JV Flash操作指南
  14. 小程序上传大小限制问题解决
  15. 计算机指令的操作码和地址,操作码和地址码
  16. 数理化解题研究杂志数理化解题研究杂志社数理化解题研究编辑部2022年第15期目录
  17. npm与package.json详解
  18. Golang.Go语言基础
  19. Unity中ComputeShader入门
  20. 服! 买不起2.6亿一只的加密猫, 他用10分钟生了一窝!

热门文章

  1. addEventListener 的事件函数的传递【转载】
  2. 【转】Asp.net控件开发学习笔记整理篇 - 数据回传
  3. 渲染终极者 finalRender R3.5 SE for 3ds max/design 2009/2010/2011 32位/64位 汉
  4. 双绞线直连法如何才能使两台电脑实现共享
  5. 认识mysql总结_从根上理解Mysql - 读后个人总结1-搜云库
  6. es6中的块级作用域
  7. Element.shadowRoot
  8. XML与web开发-01- 在页面显示和 XML DOM 解析
  9. jenkins没安装git报错
  10. 详细的DedeCMS(织梦)目录权限安全设置教程