【发布时间】:2015-11-12 20:10:43
【问题描述】:
我有以下控制器:
[HttpPost]
[OutputCache(Duration=3600, VaryByParam="*", Location=OutputCacheLocation.Server)]
public JsonResult FreeTextQuery(SearchFiltersQuery filters)
{
Trace.TraceInformation("Entering method SearchController.FreeTextQuery");
SearchResults aResults = new SearchResults();
if (ModelState.IsValid)
{
try
{
ClaimsPrincipal user = User as ClaimsPrincipal;
aResults = _objectRepository.GetFullTextResults(filters, user);
}
catch (Exception ex)
{
if (!(@Url == null))
{
return Json(new { redirectUrl = @Url.Action("ShowError", "Error", new { message = ex.Message }), isRedirect = true });
}
}
}
Trace.TraceInformation("Exiting method SearchController.FreeTextQuery");
return Json(aResults);
}
由下面的ajax函数调用
function GetResults(aFilters) {
var aEndPointUrl = "/Search/FreeTextQuery";
var jSonString = JSON.stringify(aFilters);
$.ajax({
type: 'POST',
url: aEndPointUrl,
traditional: true,
contentType: 'application/json; charset=utf-8',
data: jSonString,
success: function (data) {
// omitted for brevity
},
error: function (xhr, ajaxOptions, error) {
window.location.href = "/Error/ShowError?message=" + encodeURIComponent("Onbekende fout bij het zoeken.");
}
});
此代码在控制器上没有 OutputCache 属性的情况下可以正常工作。有了它,它总是会遇到 ajax 调用的错误函数,我看到响应不是 JSON,而是 HTML 内容(因此错误是解析器错误)。 输出缓存可能出了什么问题,如何让它正常工作?我尝试了许多提供 VaryByParams 的方法,但结果都一样。
【问题讨论】:
标签: ajax caching model-view-controller