gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:10:22 26 4
gpt4 key购买 nike

在 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 block 中并记录异常对象或手动将其发送给调用者。

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

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

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

关于c# - 在 Asp.Net Core 3.1 中处理 SignalR 集线器中的所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64133021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com