将null参数传递给SignalR客户端代理时,“值不能为空”

时间:2014-03-21 18:12:39

标签: c# json.net signalr signalr-hub

使用SignalR(v2.0.2)我得到了这个例外:

Value cannot be null.
Parameter name: o
   at Newtonsoft.Json.Utilities.ValidationUtils.ArgumentNotNull(Object value, String parameterName)
   at Newtonsoft.Json.Linq.JToken.FromObjectInternal(Object o, JsonSerializer jsonSerializer)
   at Newtonsoft.Json.Linq.JToken.FromObject(Object o, JsonSerializer jsonSerializer)
   at Microsoft.AspNet.SignalR.Client.Hubs.HubProxy.Invoke[T](String method, Object[] args)

我用反射调用HubProxy,并且我传入一些触发此错误的空参数(也就是说,Object[] args中的某些项为null)。但是,将参数传递给方法的null是完全合法的事情。这是SignalR中的一个错误,因为它试图序列化空参数,或者它是否是Json.NET(v6.0.1)中的一个错误,因为它不应该尝试序列化一个空对象?

2 个答案:

答案 0 :(得分:0)

您可以尝试覆盖SignalR集线器调用方法,例如: 像这样自定义Microsoft.AspNet.SignalR.AuthorizeAttribute

public override bool AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext, bool appliesToMethod)
{

}

然后在调用之前,您可以检查您的请求并在需要时进行一些处理。

答案 1 :(得分:0)

原来这是SignalR中的一个已知错误,已经修复并将包含在即将发布的2.2.1版本中。查看他们的机票here