当我URL
(使用内置returning Json
)时,每次从浏览器的地址栏测试新的MVC JsonResult helper
时,我都会收到相同的旧错误:
此请求已被阻止,因为在
GET request
中使用此信息时,可能会向第三方网站披露敏感信息。要允许GET requests
,请将JsonRequestBehavior
设置为AllowGet
。
而不是在确认中咕噜咕噜地说起Fiddler做一个帖子请求,这一次,我想知道GET
请求究竟是什么意味着POST
请求没有?
答案 0 :(得分:102)
使用以下内容:
return this.Json("you result", JsonRequestBehavior.AllowGet);
答案 1 :(得分:74)
假设您的网站有GetUser
网络方法:
http://www.example.com/User/GetUser/32
返回JSON响应:
{ "Name": "John Doe" }
如果此方法仅接受POST请求,则只有在使用POST方法向http://www.example.com/User/GetUser/32
发出AJAX请求时,才会将内容返回给浏览器。请注意,除非您已实施CORS,否则浏览器将保护来自向您提出此请求的其他域中的数据。
但是,如果你允许GET请求,以及使用GET而不是POST发出类似于上述的AJAX请求,恶意用户可以使用script
将JSON包含在他们自己网站的上下文中HTML中的标记。例如在www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
这个JavaScript对www.evil.com
应该没用,因为无法读取web方法返回的对象。但是,由于旧版浏览器(例如Firefox 3)中存在错误,因此可以重新定义JavaScript原型对象,并使www.evil.com
能够读取您的方法返回的数据。这被称为JSON Hijacking。
有关防止此问题的一些方法,请参阅this post。但是,现代浏览器的更高版本(Firefox,Chrome,IE)并不存在已知问题。
答案 2 :(得分:50)
默认情况下,ASP.NET MVC框架不允许您响应 具有JSON有效负载的GET请求,因为恶意用户有可能通过称为JSON Hijacking的进程获得对有效负载的访问权限。您不希望在GET请求中使用JSON返回敏感信息。
如果您需要发送JSON以响应GET,并且不暴露敏感数据,您可以通过将JsonRequestBehavior.AllowGet
作为第二个参数传递给Json
来明确允许该行为
方法
阅读Phil Haack的JSON Hijacking
答案 3 :(得分:6)
当我们想从MVC应用程序返回一个json对象到客户端时,我们应该在返回一个对象时显式指定JsonRequestBehavior.AllowGet。因此,我返回如下的json数据来克服这个问题:
Select a.id
FROM ( SELECT id FROM C WHERE val = 1 ) AS cx
JOIN B ON b.c_id = cx.id
JOIN A ON (a.id = b.a_id)
where a.created >= now() - interval 90 day
and a.val = 0
答案 4 :(得分:3)
您必须像这样使用JsonRequest的JsonRequestBehavior.AllowGet:
let canvas= document.querySelector('canvas');
canvas.width=900;
canvas.height=700;
let base_x=0;
let base_y=0;
const ctx=canvas.getContext('2d');
let player_x=30;
let player_y=140;
let speedY=0;
let speedY2=0;
let player2_x=830;
let player2_y=140;
let arcX=canvas.width/2;
let arcY=canvas.height/2;
window.alert('Hráč 1[W,S] \nHráč 2[ArrowUp,ArrowDown]');
//controls
function Input(event){
let ifPressed=event.key;
if(ifPressed==="w"){
speedY=-7;
} else if(ifPressed==="s"){
speedY=7;
}
else if(ifPressed==="ArrowUp"){
speedY2=-7;
}else if(ifPressed==="ArrowDown"){
speedY2=7;
}
}
function Released(event){
let ifReleased=event.key;
if(ifReleased==='w' || ifReleased==='s' ){
speedY=0;
}else if(ifReleased==='ArrowUp' || ifReleased==='ArrowDown'){
speedY2=0;
}
}
//60fps refresh
function update(){
//colission
if(player_y+speedY<=base_y){
speedY=0;
player_y=1;
}else if(player_y+speedY>=350){
speedY=0;
player_y=349;
}//collision for player 2
else if(player2_y+speedY2<=base_y){
speedY2=0;
player2_y=1;
}else if(player2_y+speedY2>=350){
speedY2=0;
player2_y=349;
}
player_y+=speedY;
player2_y+=speedY2;
//bg
ctx.fillStyle='black';
ctx.fillRect(base_x,base_y,canvas.width,canvas.height);
//ball
ctx.beginPath();
ctx.arc(arcX,arcY,20,0,2*Math.PI);
ctx.strokeStyle='white';
ctx.stroke();
ctx.fillStyle='red';
ctx.fill();
//collision lopty s hračmi
if(arcX || arcY >=player_x){
}
//player1
ctx.fillStyle='white';
ctx.fillRect(player_x,player_y,40,350);
//player2
ctx.fillStyle='grey';
ctx.fillRect(player2_x,player2_y,40,350);
}
window.setInterval(update,1000/60);
document.addEventListener('keydown',Input);
document.addEventListener('keyup',Released);
答案 5 :(得分:0)
返回Json(“ Success”,JsonRequestBehavior.AllowGet)