I am trying to create a Redis provider for Strathweb.CacheOutput.WebApi2, but trying to convert from byte [] → RedisValue → byte [] returns null.
I can manually set the object type as byte [] instead of var / RedisValue, and it will correctly return the value as byte [], but after it was set as RedisValue, it could not convert it to byte [].
In its interface, Get always returns an object, so I cannot force this type or use a separate call without having to change the interface.
If I try to do the result as byte[] , I get Cannot convert type 'StackExchange.Redis.RedisValue' to 'byte[]' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
If I try to do (byte[])result , I get Cannot cast 'result' (which has an actual type of 'StackExchange.Redis.RedisValue') to 'byte[]'
Is there something that I am missing, or will I have to hack something by checking which data types it searches for based on the key?
Here is the interface:
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; } } }
And this is how it is called:
var val = _webApiCache.Get(cachekey) as byte[]; if (val == null) return;
Edit: adding examples of API I implemented using both ServiceStack.Redis v3 (working atm as it just uses object and StackExchange.Redis, which doesn't work)
https://github.com/mackayj/WebApi.OutputCache.Redis.ServiceStack
https://github.com/mackayj/WebApi.OutputCache.Redis.StackExchange