2015-11-12 2 views
0

У меня есть следующий контроллер:MVC OutputCache JsonResult возвращает HTML

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

, который вызывается следующей АЯКС функции

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, но все они имеют одинаковый результат.

ответ

Смежные вопросы