我确实有以下代码...和接受编码:放气
public object Get(DTOs.Product request)
{
...
var sCache = base.RequestContext.ToOptimizedResultUsingCache(
this.CacheClient, cacheKey, expireInTimespan, () =>
{
// Business layer returns resultant dataset as XmlDocument
...
return sXML.InnerXml;
});
//returns ServiceStack.Common.Web.HttpResult;
return GenerateResp(sCache, base.Request.Headers["Accept"]);
}
问题是基础。RequestContext.ToOptimizedResultUsingCache 返回 ServiceStack.Common.Web.CompressedResult 即使我返回 XML。我知道 Accept-Encoding: deflate 会导致 RequestContext.CompressionType 收缩。
当没有接受编码(通过提琴手测试)时,上面的代码工作正常。
但是,如果请求来自浏览器,它将以压缩的形式出现,在这种情况下,我如何让 sCache 作为字符串将其传递给 GenerateResp?
感谢您的帮助。
我能够通过修改代码来解决问题...
public object Get(DTOs.Product request)
{
...
var objCache = base.RequestContext.ToOptimizedResultUsingCache(
this.CacheClient, cacheKey, expireInTimespan, () =>
{
// Business layer returns resultant dataset as XmlDocument
...
return sXML.InnerXml;
});
string compressionType = base.RequestContext.CompressionType;
bool doCompression = compressionType != null;
string transformed = "";
if (doCompression)
{
byte[] bCache = ((ServiceStack.Common.Web.CompressedResult)(objCache)).Contents;
transformed = bCache.Decompress(base.RequestContext.CompressionType);
}
else
{
transformed = (string)objCache;
}
//returns ServiceStack.Common.Web.HttpResult;
//In GenerateResp, If compressionType contains "gzip" or "deflate", I compress back the response to respective compression, and add respective Content-Encoding to the header.
return GenerateResp(transformed, base.Request.Headers["Accept"], compressionType);
}
谢谢。