Я использую WebApiThrottle , и он отлично работает, за исключением случаев, когда я пытаюсь вернуть пользовательский объект ошибки.Моя конфигурация имеет следующее:
QuotaExceededContent = (rateLimit, rateLimitPeriod) =>
{
return new ErrorModel(ErrorModel.ErrorTypes.TooManyRequests);
}
Приведенный выше код работает нормально, возвращая JSON.Однако при попытке вернуть XML выдается следующая ошибка:
Тип 'xxx' с именем контракта данных 'xxx' не ожидается.Рассмотрите возможность использования DataContractResolver, если вы используете DataContractSerializer или добавляете любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавляя их в список известных типов, передаваемых сериализатору.
ErrorModel - это пользовательский класс, который я использую в другом месте, и он отлично работает как для возврата в JSON, так и в XML.На самом деле, я обычно возвращаю это так:
return request.CreateResponse(HttpStatusCode.Unauthorized, new ErrorModel(ErrorModel.ErrorTypes.InvalidKey));
Когда я смотрю в исходном коде WebApiThrottle, кажется, что он делает то же самое (контент - это вывод моей конфигурации выше, которыймоя ErrorModel):
var response = request.CreateResponse(responseCode, content);
...
return Task.FromResult(response);
Это ошибка в WebApiThrottle или что-то, что мне нужно установить специально?QuotaExceededResponse () в WebApiThrottle является виртуальным, поэтому я могу переопределить его, но я просто не вижу разницы между этим методом и моим кодом, где он работает нормально.