我正在使用Backbone.js和Tornado Web服务器.在Backbone中接收集合数据的标准行为是作为JSON数组发送.
另一方面,由于以下漏洞,Tornado的标准行为是不允许使用JSON Array:
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
相关的一个是:http: //haacked.com/archive/2009/06/25/json-hijacking.aspx
当我真的是一个对象列表时,我不必在对象中包装我的JSON.
我无法在现代浏览器中重现这些攻击(即当前的Chrome,Firefox,Safari和IE9).与此同时,我无法确认现代浏览器解决这些问题的任何地方.
为了确保我既没有任何可能的糟糕的编程技能,也没有糟糕的谷歌搜索技能:
在现代浏览器中,这些JSON劫持攻击现在仍然是一个问题吗?
(注意:很抱歉可能重复:在现代浏览器上可以进行'JSON劫持'吗? 但由于接受的答案似乎没有回答这个问题 - 我认为现在是时候再问一遍并得到一些更明确的解释.)
作为ASP.NET MVC 2 Beta 2更新的一部分,默认情况下不允许JSON GET请求.看来您需要在从控制器返回对象之前将JsonRequestBehavior字段设置为.JsonRequestBehavior.AllowGetJsonResult
public JsonResult IsEmailValid(...)
{
JsonResult result = new JsonResult();
result.Data = ..... ;
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
}
Run Code Online (Sandbox Code Playgroud)
这背后的原因是什么?如果我使用JSON GET尝试进行远程验证,我应该使用不同的技术吗?
我有一个MVC应用程序,其中包含很多使用Ajax(jQuery)调用的Controller Actions,并返回部分视图内容,这些内容会更新屏幕的一部分.但我宁愿做的是返回类似这样的JSON.
return Json(new {
Result = true,
Message = "Item has been saved",
Content = View("Partial")
});
Run Code Online (Sandbox Code Playgroud)
HTML只是Json的一个属性.这意味着我需要检索由View方法呈现的HTML.有没有简单的方法可以做到这一点,我看到的一些例子非常令人费解.
编辑:这个问题最初是针对ASP.NET MVC 1的,但如果版本2更容易,我想听听答案.
我需要从mvc控制器获取一个列表来查看使用jquery ajax.我怎样才能做到这一点.这是我的代码.它的警报错误消息.
public class FoodController : Controller
{
[System.Web.Mvc.HttpPost]
public IList<Food> getFoodDetails(int userId)
{
IList<Food> FoodList = new List<Food>();
FoodList = FoodService.getFoodDetails(userId);
return (FoodList);
}
}
Run Code Online (Sandbox Code Playgroud)
function GetFoodDetails() {
debugger;
$.ajax({
type: "POST",
url: "Food/getFoodDetails",
data: '{userId:"' + Id + '"}',
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (result) {
debugger;
alert(result)
},
error: function (response) {
debugger;
alert('eror');
}
});
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取一个带有对C#方法的AJAX调用的列表,并使用jQuery显示其项目,但我无法做到.这是我得到的:
public string test()
{
return "test ok";
}
$.ajax({
type: "POST",
url: "Computer/test",
success: function (data) {
alert(data);
},
error: function () {
alert("error");
}
});
Run Code Online (Sandbox Code Playgroud)
这按预期工作,我得到一个'test ok'字符串的警报.但是,如果我尝试返回一个列表,我无法在jquery中遍历它.
public List<string> testList()
{
List<string> test = new List<string>;
test.Add("test1");
test.Add("test2");
return test;
}
$.ajax({
type: "POST",
url: "Computer/testList",
dataType: "json",
success: function (data) {
var list = data.d;
$.each(list, function (index, item) {
alert(item);
});
},
error: function (xhr) {
alert(xhr.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
使用此代码,我收到以下错误:
System.Collections.Generic.List`1 [System.String]
希望你能帮助我,谢谢.
我已经坚持了一段时间了.我试图通过ajax从我的控制器发送一个bool到视图.我尝试了几种不同的教程和方法,但似乎无法检索一些简单的数据.我希望有人能解释我做错了什么.
这是我的代码:
阿贾克斯:
$(document).ready(function () {
$.ajax({
"url": "/social/checkfollow",
"type": "GET",
"dataType": "json",
"success":function(data) {
console.log(data);
},
"error": function(data) {
console.log(data.status +" "+ data.statusText);
}
});
});
Run Code Online (Sandbox Code Playgroud)
和控制器:
[HttpGet]
public virtual ActionResult CheckFollow()
{
var pass = false;
return Json(new {result = pass});
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我不断收到500内部服务错误.我知道这是一个非常基本的问题,我非常感谢你的帮助.
我不确定我在这里做错了什么.
我有一个列表,我正在创建超链接.我需要先将用户指向正确的页面,所以我做了一个getJson.
我的.cshtm文件中有以下代码:
$.getJSON('/Home/GetLocType', { "locId": loc.locId },
function(result) {
result = Json.stringify(result);
if(result == '1')
{
$('<li><a id=' + loc.locId + ' href="/DataEntry" rel="external">' + loc.locName + '</a></li>').appendTo("#btnList");
}
else
{
$('<li><a id=' + loc.locId + ' href="/DataEntry/PForm" rel="external">' + loc.locName + '</a></li>').appendTo("#btnList");
}
});
Run Code Online (Sandbox Code Playgroud)
我在控制器中有以下代码:
private JsonResult GetLocType(int locId)
{
int locationId = Convert.ToInt32(locId);
var result = db.Locations.Where(a => a.LocID == locationId).Select(a => a.TypeId);
return Json(result);
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是Json方法永远不会被调用.
我有以下脚本在我的 _layout 视图中呈现:-
$(document).ready(function () {
$("input[data-autocomplete-source]").each(function () {
var target = $(this);
target.autocomplete({
source: target.attr("data-autocomplete-source"),
minLength: 1,
delay: 1000
});
});
});
Run Code Online (Sandbox Code Playgroud)
我添加了以下字段以对其应用自动完成功能:-
<input name="term" type="text" data-val="true"
data-val-required= "Please enter a value."
data-autocomplete-source= "@Url.Action("AutoComplete", "Staff")" />
Run Code Online (Sandbox Code Playgroud)
现在,如果我将视图渲染为部分视图,则脚本将不会触发,并且不会执行自动完成,因此我在 ajax-success 中添加了自动完成,如下所示:-
$(document).ready(function () {
$(document).ajaxSuccess(function () {
$("input[data-autocomplete-source]").each(function () {
var target = $(this);
target.autocomplete({
source: target.attr("data-autocomplete-source"),
minLength: 1,
delay: 1000
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
现在添加AjaxSuccess操作方法后将被调用,当我检查 IE F12 开发人员工具上的响应时,我可以看到浏览器将收到 json 响应,但字段内不会显示任何内容(我的意思是自动完成结果不会显示)在局部视图上)?
编辑
负责自动完成的操作方法是:-
public async Task<ActionResult> AutoComplete(string term)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个简单的模型,例如:
public class Employer
{
[Required(ErrorMessage = "Please specify id")]
public int Id { get; set; }
[MaxLength(256, ErrorMessage = "Max lenght should be less than 256")]
[Required(ErrorMessage = "Please specify Name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please specify id of organization")]
public int OrganizationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
那么控制器是:
public IHttpActionResult Post(Employer employer)
{
if(!IsActiveOrganization(employer.OrganizationId))
{
ModelState.AddModelError(nameof(employer.OrganizationId), "The organization is not active!");
}
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试在创建新雇主之前验证模型。因此,当我传递无效模型时id,响应将如下:
{ …Run Code Online (Sandbox Code Playgroud) 如何创建一个返回ResponseRedirect的控制器函数,而不是将ResponseRedirect作为Json对象返回?
我想做这样的事情
return Json(new { url = RedirectToAction("AccountMyProducts", "Account"), redirect = "true" });
Run Code Online (Sandbox Code Playgroud)
在我的jsonobject中获取重定向url.
asp.net-mvc ×8
c# ×5
ajax ×3
jquery ×3
json ×3
javascript ×2
asp.net ×1
autocomplete ×1
browser ×1
jquery-ajaxq ×1
modelstate ×1
partial ×1
razor ×1
security ×1
tornado ×1
validation ×1