如何基地.RequestContext.ToOptimizedResultUsingCache() 返回字符串 for



我确实有以下代码...和接受编码:放气

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);            
}

谢谢。

最新更新