要在服务器上记录从客户端发送到服务器的消息的反序列化异常,您可以装饰 SignalR 中包含的 DefaultParameterResolver。
创建一个修饰的 IParameterResolver 记录异常并调用 DefaultParameterResolver
public class LoggedParameterResolver : IParameterResolver
{
private readonly DefaultParameterResolver _parameterResolver;
private readonly ILogger _logger;
public LoggedParameterResolver(DefaultParameterResolver parameterResolver, ILogger logger)
{
_parameterResolver = parameterResolver;
_logger = logger;
}
public IList<object> ResolveMethodParameters(MethodDescriptor method, IList<IJsonValue> values)
{
try
{
return _parameterResolver.ResolveMethodParameters(method, values);
}
catch (Exception exception)
{
_logger.LogException(exception);
throw;
}
}
}
并配置 SignalR 以使用它
IParameterResolver loggedParameterResolver = new LoggedParameterResolver(new DefaultParameterResolver(), logger);
GlobalHost.DependencyResolver.Register(typeof(IParameterResolver),()=> loggedParameterResolver );