如何在 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 集成越来越好,是得需要大家花费精力好好学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原创]FineUI秘密花园(二十七) — 窗体控件概述(上)

窗体控件在项目中使用非常频繁&#xff0c;同时窗体控件和启用IFrame的面板控件也一起构成了FineUI所特有的内联框架&#xff0c;从而使弹出窗体不再局限于IFrame页面中。本章我们会详细介绍窗体控件的基本用法。 创建窗体控件 在页面中声明窗体控件标签&#xff0c;并设置需要…

Android之AIDL使用详解

1.什么是aidl:aidl是 Android Interface definition language的缩写&#xff0c;一看就明白&#xff0c;它是一种android内部进程通信接口的描述语言&#xff0c;通过它我们可以定义进程间的通信接口 icp:interprocess communication :内部进程通信 2.既然aidl可以定义并实现进…

用php打印九九乘法表,php如何打印出九九乘法表呢?

摘要:下文讲述使用php代码在页面上输出九九乘法表的示例分享&#xff0c;如下所示&#xff1b;实现思路:主要使用遍历的方式输出九九乘法表例:php 循环输出九九乘法表echo "maomao365.com 示例分享\n";echo "for 循环打印出九九乘法表";for($j1; $j<9; …

CentOS 安装jdk1.7 64位

[rootlocalhost ~]# java -versionjava version "1.6.0"OpenJDK Runtime Environment (build 1.6.0-b09)OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode) 1.6的&#xff0c;这个必须换掉 。下载jdk-7u3-linux-x64.rpm # wget http://download.oracle.com/o…

LeetCode-Add Binary

Given two binary strings, return their sum (also a binary string).For example, a "11" b "1" Return "100". 这道题不难&#xff0c;注意分清情况。 public class Solution {public String addBinary(String a, String b) {String str&qu…

他言行不一屡次跳槽,还升职加薪走上了人生巅峰,全数学界都炸了......

全世界只有3.14 % 的人关注了爆炸吧知识看在大家都这么爱学习的份上&#xff0c;今天小天就和大家介绍一名老师吧&#xff01;这位老师就是亚历山大.雅科夫列奇.辛钦&#xff01;家庭教育好&#xff0c;学霸就有了亚历山大.雅科夫列奇.辛钦&#xff0c;1894年出生于前苏联莫斯科…

IoTSharp部署教程-Sqlite分表篇

IoTSharp的部署环境极其灵活&#xff0c;我们推荐使用Docker方式进行部署&#xff0c; 这减少了很多配置&#xff0c; 首先最简单的部署当然属于 Sqlite 数据库&#xff0c; 且不适用任何外部依赖。 在生产环境中&#xff0c; 我们需要配置 appsettings.Production.json 文件&a…

Android之AsyncTask两种线程池分析和总结

Android AsyncTask两种线程池分析和总结(一) 前言在android AsyncTask里面有两种线程池供我们调用1&#xff0e; THREAD_POOL_EXECUTOR, 异步线程池2&#xff0e; SERIAL_EXECUTOR&#xff0c;同步线程池正如上面名称描述的那样&#xff0c;一个是异步线程池&#xff…

php 一片空白,解决运行PHP一片空白

今天手打了一个PHP页面&#xff0c;结果运行的时候一片空白&#xff0c;啥都没有&#xff0c;html部分也都被“消失”了&#xff0c;也没有错误提示&#xff0c;甚是不解。删掉PHP部分&#xff0c;html部分出来了&#xff0c;好的&#xff0c;那肯定是PHP部分出问题了。$ok tr…

snmp服务中snmpwalk命令常用方法总结

在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,现总结一些常用的方法如下: 1、snmpwalk -c public -v 1 -m ALL 192.168.30.49 .1.3.6.1.2.1.25.1 得到取得windows端的系统进程用户数等 2、snmpwalk -c public -v 1 -m ALL 192.168.…

一款好的折线图、饼图、柱形图

链接地址http://www.highcharts.com/demo/line-basic/skies http://www.highcharts.com/demo/转载于:https://www.cnblogs.com/blueking/p/3530787.html

关于ubuntu 14.04 dpkg 问题

dpkg fatal error&#xff01;解决方法&#xff1a;cd /var/lib/dpkgrm diversionsrm statoverrideapt-get update也可尝试 apt-get autoremove packagenameapt-get install packagename ! 转载于:https://blog.51cto.com/9498811/1769997

被遗忘的数学家!曾提出最接地气的数学定理,可以计算男朋友真不真心的那种......

全世界只有3.14 % 的人关注了爆炸吧知识在介绍了业余数学家费马后&#xff0c;听说很多小伙伴还想看看业余的。这不&#xff0c;小天这次又来介绍业余数学家来了。险些被遗忘托马斯.贝叶斯&#xff0c;十八世纪英国的一个长老会的牧师&#xff08;专业&#xff09;和数学家&…

Android之MVVM框架 - 数据绑定

本教程是跟着 Data Binding Guide 学习过程中得出的一些实践经验&#xff0c;同时修改了官方教程的一些错误&#xff0c;每一个知识点都有对应的源码&#xff0c;争取做到实践与理论相结合。 Data Binding 解决了 Android UI 编程中的一个痛点&#xff0c;官方原生支持 MVVM 模…

再见 Typora,这款 Markdown 编辑器开源又免费!

推荐一个免费开源的 Markdown 编辑器编程导航 致力于推荐优质编程资源 &#x1f48e;项目开源仓库&#xff1a;https://github.com/liyupi/code-nav跪求一个 star ⭐️哈喽大家好&#xff01;我是编程导航的小编火宝。前段时间 Typora 宣布将升级并开始收费&#xff0c;想必大家…

java笔试题递归,递归(网上搜的一些笔试题)

一个射击运动员打靶&#xff0c;靶一共有10环&#xff0c;连开10枪打中90环的可能性有多少种&#xff1f;请用递归算法编程实现。public class Cs{public int times;public int score;public int[] loops;public int count0;public static void main(String[] args){Cs csnew C…

Android窗口管理服务WindowManagerService的简要介绍和学习计划

在前一个系列文章中&#xff0c;我们从个体的角度来分析了Android应用程序窗口的实现框架。事实上&#xff0c;如果我们从整体的角度来看&#xff0c;Android应用程序窗口的实现要更复杂&#xff0c;因为它们的类型和作用不同&#xff0c;且会相互影响。在Android系统中&#x…

人月神话

http://files.cnblogs.com/ITGirl00/%E4%B8%AD%E6%96%87%E7%89%88-%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D.pdf转载于:https://www.cnblogs.com/ITGirl00/p/3533753.html

Andorid之为何要用到NDK?

概括来说主要分为以下几种情况&#xff1a; 1. 代码的保护&#xff0c;由于apk的java层代码很容易被反编译&#xff0c;而C/C库反汇难度较大。 2. 在NDK中调用第三方C/C库&#xff0c;因为大部分的开源库都是用C/C代码编写的。 3. 便于移植&#xff0c;用C/C写得库可以方便在其…

各变量字节数

Win64, 也就是X64编译配置下&#xff1a; char 1字节&#xff1b; short 2字节&#xff1b; int 4字节&#xff1b; long 4字节&#xff1b; long long 8字节&#xff1b; float 4字节&…