-1

我确实有以下代码......和​​Accept-Encoding: deflate

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

问题是base.RequestContext.ToOptimizedResultUsingCache返回ServiceStack.Common.Web.CompressedResult即使我返回 XML。我知道Accept-Encoding: deflate会导致RequestContext.CompressionType to deflate

当没有接受编码时(通过提琴手测试),上面的代码工作正常。

但是,如果请求来自浏览器,它将以压缩的形式出现,在这种情况下,我怎样才能将 sCache 作为字符串传递给 GenerateResp?

谢谢你的帮助。

4

1 回答 1

2

我可以通过修改代码来解决问题...

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

谢谢你。

于 2013-09-17T19:15:31.797 回答