2

キャッシュされた応答は、すべての引用符がエスケープされ、\n 文字が追加された状態で返されます。結果の文字列も引用符で囲まれます。キャッシュされていない場合、html は問題なく返されます。どうすればこれを乗り越えることができますか? クライアントで angularjs を使用して API リクエストを作成し、戻り値を div の $.html() に設定しています。

if (enableCaching)
{
    var cacheKey = UrnId.Create<ContentValueRequest>(Request.Group, Request.Key);
    var expireInTimespan = new TimeSpan(0, 5, 0);

    return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, expireInTimespan, () => {
        return GetContentValueRequest(Request);
    });
}
else
    return GetContentValueRequest(Request);
4

1 に答える 1

1

質問に答えるコンテキスト/コードがすべて揃っているかどうかはわかりませんが、以下のコードはうまくいくようです。が ServiceStack リクエスト URL に含まれていない場合?formt=html、JSON 文字列が返され、引用符がエスケープされ、\n 文字が追加されます。

HTML

<div ng-app="testApp">

    <div ng-controller="testCtrl">

        <p>Write Contents Below:</p>

        <div id="writeHere"></div>
    </div>

</div>

角度コード

angular.module('testApp', [], function () {

})
.controller('testCtrl', function ($scope, $http) {

    var req = $http.get('/api/CacheTest?format=html');
    req.success(function (data) {
        $('#writeHere').html(data);
    });
    req.error(function (data) {
        $('#writeHere').html('Error');
    });

});

リクエスト&サービス

[Route("/CacheTest")]
public class ContentValueRequest
{
    public string Group { get; set; }
    public string Key { get; set; }
}

public class CacheService : Service
{
    public object Get(ContentValueRequest Request)
    {
        var enableCaching = true;
        if (enableCaching)
        {
            var cacheKey = UrnId.Create<ContentValueRequest>("someKey");
            var expireInTimespan = new TimeSpan(0, 5, 0);

            return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, expireInTimespan, () =>
            {
                return GetContentValueRequest(Request);
            });
        }
        else
            return GetContentValueRequest(Request);
    }

    private string GetContentValueRequest(ContentValueRequest request)
    {
        var ret = @"<em>""Quoted Text"", <em>Bold</em>" + Environment.NewLine;
        ret += @"A second line.";
        return ret;
    }
}
于 2013-10-04T05:02:36.057 に答える