"Значение не может быть null" при передаче нулевых аргументов прокси-серверу SignalR на стороне клиента

использование 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) в том, что он не должен пытаться сериализовать null объект?

2 ответов


оказывается, это известная ошибка в SignalR, которая была исправлена и будет включена в предстоящий выпуск 2.2.1. Смотрите их билет здесь.


вы можете попробовать переопределить SignalR метод вызова концентраторов, например: настроить Microsoft.AspNet.SignalR.AuthorizeAttribute такой:

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

}

затем перед вызовом вы можете проверить свой запрос и при необходимости выполнить некоторую обработку.