作为ASP.NET MVC 2 Beta 2更新的一部分,默认情况下不允许JSON GET请求.看来您需要在从控制器返回对象之前将JsonRequestBehavior
字段设置为.JsonRequestBehavior.AllowGet
JsonResult
public JsonResult IsEmailValid(...) { JsonResult result = new JsonResult(); result.Data = ..... ; result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return result; }
这背后的原因是什么?如果我使用JSON GET尝试进行远程验证,我应该使用不同的技术吗?
DenyGet默认的原因是在MSDN上,链接到Phil Haack的博客以获取更多详细信息.看起来像一个跨站点脚本漏洞.
默认情况下,HTTP GET被禁用,作为ASP.NET跨站请求伪造(CSRF/XSRF)保护的一部分.如果您的Web服务接受GET请求,那么它们可能容易受到第三方站点的攻击,这些站点通过标记发出请求,并可能通过修改JavaScript setter来获取响应.
但值得注意的是,禁用GET请求不足以阻止CSRF攻击,也不是保护您的服务免受上述攻击类型影响的唯一方法.请参阅针对跨站点请求伪造的强大防御,以便对不同的攻击媒介及其如何防范它们进行详细分析.