Я пытаюсь создать поставщика Redis для Strathweb.CacheOutput.WebApi2, но пытается конвертировать из байта [] -> RedisValue - > byte [] возвращает null.StackExchange.Redis casting RedisValue to byte [] через «as byte []» возвращает null
Я могу вручную задать тип объекта как byte [] вместо var/RedisValue, и он будет правильно возвращать значение в виде байта [], но после того, как он был установлен как RedisValue, он не смог преобразовать его в байт [].
В своем интерфейсе Get всегда возвращает объект, поэтому я не могу заставить этот тип или использовать отдельный вызов без необходимости изменять интерфейс.
Если я пытаюсь выполнить команду result as byte[]
я получаю Cannot convert type 'StackExchange.Redis.RedisValue' to 'byte[]' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
Если я пытаюсь сделать (byte[])result
я Cannot cast 'result' (which has an actual type of 'StackExchange.Redis.RedisValue') to 'byte[]'
Есть ли что-то я отсутствует или я буду иметь, чтобы взломать его в как-то, проверяя, какие типы данных он ищет на основе ключа?
Вот интерфейс:
namespace WebApi.OutputCache.Core.Cache
{
public interface IApiOutputCache
{
void RemoveStartsWith(string key);
T Get<T>(string key) where T : class;
object Get(string key);
void Remove(string key);
bool Contains(string key);
void Add(string key, object o, DateTimeOffset expiration, string dependsOnKey = null);
IEnumerable<string> AllKeys { get; }
}
}
А вот как его называют:
var val = _webApiCache.Get(cachekey) as byte[];
if (val == null) return;
Edit: Добавление примеров API я реализован с использованием как ServiceStack.Redis v3 (рабочее атм в нем просто использует object
и StackExchange.Redis, который не работает)
https://github.com/mackayj/WebApi.OutputCache.Redis.ServiceStack
https://github.com/mackayj/WebApi.OutputCache.Redis.StackExchange
Проблема заключается в том, что интерфейс возвращает объект, а вызывающий код выполняет 'как byte []'. Я пытаюсь не изменять интерфейс или основной код для него, но я думаю, что я просто добавлю новый метод, который возвращает байт []. Я отредактировал свой пост, чтобы показать правильный код вызова с 'as byte []' – John