"Значение не может быть пустым" при передаче нулевых аргументов на клиентский прокси 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 для аргумента метода является совершенно законной задачей. Является ли это ошибкой в ​​SignalR в том, что она пытается сериализовать нулевые параметры или это ошибка в Json.NET(v6.0.1), поскольку она не должна пытаться сериализовать нулевой объект?

Ответ 1

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

Ответ 2

Вы можете попробовать переопределить метод вызова https SignalR, например: настройте Microsoft.AspNet.SignalR.AuthorizeAttribute следующим образом:

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

}

Затем перед вызовом вы можете проверить свой запрос и при необходимости обработать его.