我有一个具有以下签名的 MVC4 控制器:
[HttpPost]
public JsonResult SubmitPage(PageSubmissionModel model)
{
...
return Json(result);
}
其中返回模型是一个简单模型:
public class Page
{
public Guid PageId { get; set; }
public Guid SurveyId { get; set; }
public int PageNo { get; set; }
public string Title { get; set; }
public string Introduction { get; set; }
}
或 JSON 编码的 url 字符串:
return Json(new {
RedirectTo = Url.RouteUrl(route.RouteName, route.RouteValues)
});
使用以下 jQuery 方法从客户端调用此控制器:
ajaxPost: function (responseData, callback) {
$.ajax({
type: "POST",
url: ""/Surveys/Ajax/SubmitPage",
data: JSON.stringify(data),
dataType: "json",
contentType: "application/json; charset=utf-8",
cache: false,
success: function (data) {
if (typeof callback === 'function') {
callback(data);
}
},
error: function (xmlHttpRequest, errorMessage, exception) {
var msg = "Problem calling " + url + "()\r\n" + errorMessage;
alert(msg);
}
});
}
其中 data 参数是一个构造如下的 JavaScript 对象:
responseData = {
SurveyResponseId: 23,
SubscriberResponseId: 47,
PageId: 1,
Responses: [
{id: 24, value: "Tom" },
....
]
};
当我运行此代码时,我收到以下服务器错误:
此请求已被阻止,因为在 GET 请求中使用敏感信息可能会泄露给第三方网站
研究这个错误(http://haacked.com/archive/2009/06/25/json-hijacking.aspx)我很困惑,因为据我所知,并且由 Fiddler 提出,客户端正在发布 JavaScript模型,所以我不明白为什么服务器会抛出 GET 请求错误。此外,Controller 标记有 [HttpPost] 属性。
如果有人可以提供帮助,将不胜感激。