我有一个使用ServiceStack创建的REST服务,我正在使用移动浏览器中运行的jQuery。一切正常,直到我尝试使用MemoryCacheClient在服务中实现缓存。只要我插入代码来缓存结果,我就不会将任何响应返回给浏览器。当我在Fiddler中查看请求\响应时,我收到以下错误:
响应已编码,可能需要在检查前进行解码。点击此处进行转换。
如果我只是直接从浏览器访问该服务它工作正常,在jQuery中通过.ajax方法访问时似乎只是一个问题。
这是服务代码
public override object OnGet(Products request)
{
string cacheKey =
UrnId.Create<ProductsService>("productCategoryType", request.ProductCategoryType.ToString());
return base.RequestContext.ToOptimizedResultUsingCache(this.CacheClient, cacheKey, () =>
{
//var service = this.ResolveService<ProductsService>();
ProductsResponse response = new ProductsResponse();
response.Products = GetLoanTypes(request.ProductCategoryType);
return response;
});
}
然后是Ajax
var serviceUrl = "http://local.standard.id.com/MobileServices/Products/";
var products = new Object();
products.ProductCategoryType = id;
$.ajax({
type: "GET",
contentType: "application/json",
url: serviceUrl,
data: products,
dataType: "jsonp",
success: function (data, textStatus) {
if (textStatus == "success") {
productData[id] = data;
displayProducts(data, id);
}
},
error: function (xhr, err) {
alert(err);
}
});
一旦我在服务中注释掉缓存并且总是返回原始结果,一切正常。