微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理Asp.Net Core 3.1中SignalR集线器中的所有异常

如何解决处理Asp.Net Core 3.1中SignalR集线器中的所有异常

在Web API中,所有异常都可以由中间件解决。在Asp.Net Core 5.0中,集线器过滤器将完成此工作。

但是如何在SignalR集线器中处理Asp.Net Core 3.1中的异常?是否有唯一的方法可以在下面的每种方法中编写try / catch?

[Authorize]
public class OrdersHub : BaseHub
{
        public async Task Getorder(Guid requestId,int orderId)
        {
            try
            {
                var data = await ordeRSService.GetorderAsync(orderId);
                await Clients.Caller.SendAsync("GetorderResult",requestId,result);
            }
            catch (Exception ex)
            {
                await Clients.Caller.Reject(requestId,ex);
            }
        }
}

解决方法

您可能知道ASP.NET SignalR对HubPipeline modules的支持提供了一种全局处理集线器异常的方法。

但是从this doc中我们可以发现ASP.NET Core SignalR不再支持HubPipeline模块,并且目前看来它还没有提供替代方法来全局处理传入错误。

正如您提到的,我们可以将代码包装在try-catch块中,并记录异常对象或将其手动发送给调用方。

请注意,出于安全原因,不建议在生产中建议异常向敏感客户发送详细信息。

此外,ASP.NET Core SignalR还提供built-in diagnostics logging feature,可以帮助捕获和记录有用的传输以及与集线器相关的信息,从而可以帮助解决问题。

注意:您可以选中this github issue来讨论有关“ Signalr .net核心中央异常处理”的相同要求。

,

从 .net 5.0 开始,您可以使用集线器过滤器:https://docs.microsoft.com/en-us/aspnet/core/signalr/hub-filters?view=aspnetcore-5.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。