Fir*_*ock 5 c# exception signalr-hub asp.net-core asp.net-core-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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可能知道 ASP.NET SignalR 支持HubPipeline 模块,这些模块提供了一种全局处理集线器异常的方法。
但从这个文档中我们可以发现 ASP.NET Core SignalR 不再支持 HubPipeline 模块,并且目前似乎没有提供替代方法来处理全局传入错误。
正如您所提到的,我们可以将代码包装在 try-catch 块中并记录异常对象或手动将其发送给调用者。
请注意,异常通常包含敏感信息,出于安全原因,不建议在生产中向客户端发送详细信息。
此外,ASP.NET Core SignalR 提供内置的诊断日志记录功能,可以帮助捕获和记录有用的传输和集线器相关信息,这可以帮助解决问题。
注意:您可以查看此 github 问题,其中讨论了有关“Signalr .net core 中央异常处理”的相同要求。
| 归档时间: |
|
| 查看次数: |
4898 次 |
| 最近记录: |