使用jQuery将数据模型发布到MVC4时出现安全错误
我有一个具有以下签名的MVC4控制器:使用jQuery将数据模型发布到MVC4时出现安全错误,jquery,asp.net,ajax,json,asp.net-mvc-4,Jquery,Asp.net,Ajax,Json,Asp.net Mvc 4,我有一个具有以下签名的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 P
[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);
}
});
}
其中,数据参数是一个JavaScript对象,构造如下:
responseData = {
SurveyResponseId: 23,
SubscriberResponseId: 47,
PageId: 1,
Responses: [
{id: 24, value: "Tom" },
....
]
};
运行此代码时,出现以下服务器错误:
此请求已被阻止,因为在GET请求中使用敏感信息时,可能会向第三方网站披露敏感信息
研究这个错误()我感到困惑,因为据我所知,由Fiddler产生的客户端正在发布JavaScript模型,所以我不明白服务器为什么抛出GET请求错误。此外,控制器还标记有[HttpPost]属性
如果有人能帮忙,我们将不胜感激。请尝试下面的代码
[HttpPost]
public JsonResult SubmitPage(PageSubmissionModel model)
{
...
return Json(result,JsonRequestBehavior.AllowGet);
}
请尝试下面的代码
[HttpPost]
public JsonResult SubmitPage(PageSubmissionModel model)
{
...
return Json(result,JsonRequestBehavior.AllowGet);
}
多亏了巴尔多早些时候的评论,我才知道这里发生了什么 在某些情况下,客户端脚本构建的数据模型为模型分配了错误的数据值。这可能会在服务器上导致未捕获的异常,其错误消息(我认为)会导致GET异常 通过加强初始模型验证并在控制器中添加一些更健壮的错误管理,我能够识别提交模型中的错误,并因此将其追溯到其(JavaScript)构造函数
最终,这个问题表明需要能够在开发过程中完全复制生产环境,我在本例中还没有很好地实现这一点。一旦我可以在调试器下复制问题,就很容易识别。多亏了Bardo之前的评论,我已经追踪到了这里发生的事情 在某些情况下,客户端脚本构建的数据模型为模型分配了错误的数据值。这可能会在服务器上导致未捕获的异常,其错误消息(我认为)会导致GET异常 通过加强初始模型验证并在控制器中添加一些更健壮的错误管理,我能够识别提交模型中的错误,并因此将其追溯到其(JavaScript)构造函数
最终,这个问题表明需要能够在开发过程中完全复制生产环境,我在本例中还没有很好地实现这一点。一旦我可以在调试器下复制问题,就很容易识别。您检查过请求的整个生命周期了吗?我建议您检查它,例如通过firebug,并确认请求是通过POST发出的,并且当您认为返回错误即将出现时,返回错误正在出现。让我们知道结果。你检查过你的请求的整个生命周期了吗?我建议您检查它,例如通过firebug,并确认请求是通过POST发出的,并且当您认为返回错误即将出现时,返回错误正在出现。让我们知道结果。嗨,马赫什,恐怕我不想允许GET请求。我想确定的是为什么发布的数据似乎触发了GET安全错误。嗨,Mahesh,我恐怕不想允许GET请求。我想确定的是,为什么发布的数据似乎触发了GET安全性错误。