【问题标题】:"Value cannot be null" when passing null arguments to SignalR client-side proxy将空参数传递给 SignalR 客户端代理时“值不能为空”
【发布时间】:2014-03-21 18:12:38
【问题描述】:

使用 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 作为参数传递给方法是完全合法的做法。这是 SignalR 中的错​​误,它试图序列化 null 参数,还是 Json.NET (v6.0.1) 中的错误,它不应该尝试序列化 null 对象?

【问题讨论】:

  • @tweellt,我检查了那个链接。这似乎是一个类似的错误,但不是类似的情况。
  • 您是否尝试了另一个序列化? javascriptserializer?
  • @Dmitry,我没有尝试用任何其他框架替换 SignalR 中的序列化。我真的很喜欢 Json.NET 并且不想替换它。我在软件的许多其他地方都使用了它。
  • 显示为您的代码! :)

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

}

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

【讨论】:

  • 请提供更多细节。
猜你喜欢
  • 2019-03-16
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2023-03-29
  • 2022-11-26
  • 2018-05-08
  • 2016-06-16
相关资源
最近更新 更多