我将JsonResult作为Orchard CMS站点(MVC 4)的一部分返回,它突然停止工作(具体如下)。
这是我的控制器的一个例子:
public JsonResult GetStartDate()
{
//a previous version of this question was different here
var startDate = _Settings.DateOpen.GetValueOrDefault(DateTime.MaxValue);
if (startDate < DateTime.Now)
startDate = DateTime.Now;
var start = new
{
year = startDate.Time.Year,
month = (startDate.Time.Month - 1)
};
return Json(start, JsonRequestBehavior.AllowGet);
}
它应该返回实际数据。我已经确认行动正在受到影响,并且“#34; start&#34;在传递给Json方法之前包含正确的数据。
如果我直接导航到该网址,我会看到一个空白的白色屏幕。
检查AJAX请求的结果表明调用失败,响应主体为空字符串,状态为&#34; parsererror&#34;并且实际的错误抛出是&#34; SyntaxError:意外的输入结束。&#34;
POST请求因某种原因起作用,此问题仅适用于GET。
此问题与所有 JSON GET有关,而不仅仅是任何特定方法。
什么可能影响Json方法和接收响应的客户端之间的数据?
答案 0 :(得分:0)
默认情况下,缓存所有MVC方法。这可能会在更改/调试周期中导致问题。对于初学者,您可以使用下面的装饰器关闭开发期间的缓存。
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult MyMethod()
您可能希望使用web.config中定义的缓存方案来包装所有方法。这允许通过一个在开发过程中派上用场的配置更改来控制缓存。
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<clear />
<add varyByParam="*" duration="0" name="MyCachePlan" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
使用以下装饰器:
[OutputCache(CacheProfile = "MyCachePlan")]
public ActionResult MyMethod()