假设我们有一个简单的盐土mvc4控制器以及一个返回BadRequest响应的动作,故意将新行放在错误描述中:
public class SaltOfTheEarthController : Controller
{
public ActionResult SimpleAction()
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "foo\nbar");
}
}
我们现在通过jquery ajax调用上面的控制器,如下所示:
$.ajax({
url: "/SaltOfTheEarth/SimpleAction",
method: "GET"
})
.done(function() { console.log("** done"); })
.fail(function () { console.log("** fail"); });
人们会期望asp.net基础设施能够通过抛出一个争论者(由于状态描述中的换行符)来检测新行的存在并进行干预,这自然会导致内部的错误响应。
相反(至少在我正在测试所有这些的机器上)发生的事情是'SimpleAction'方法以一种神秘的方式失败,因为ajax响应不包含任何标题或任何其他信息。
如果firefox执行了ajax调用,那么事情会变得更糟,那么在firefox放弃之前,控制器动作会被连续5次连续调用(虽然这个第二个怪癖不会发生 - 但ajax调用马上就失败了。)
两个问题:
因为\ n字符引起了很多麻烦,为什么在检测到响应头字段中的\ n字符时,HttpStatusCodeResult(或asp.net的其他内部齿轮)的构造函数不能正常工作? (可能是由于性能问题?)
为什么firefox重试相同的动作10次但chrome不重试?重试背后的逻辑是什么?