2015-07-13 51 views
1

我试图用javascript从json字符串/对象调用一个asp.net控制器方法。如何发送json对象到javascript的asp.net?

的asp.net控制器:

public class HomeController : Controller 
{ 

    public ActionResult doWork(string data) { 
      // dowork.. 
      return new EmptyResult(); 
    } 
} 

而在JavaScript是:

var XHR=new XMLHttpRequest(); 
XHR.open("GET", 'http://localhost:58476/home/dowork', true); 
XHR.setRequestHeader("Accept","application/json"); 
XHR.onreadystatechange = function() { 
    if (XHR.readyState == 4 && XHR.status == 200) { 
     alert('ok'); 
    }else{ 
     alert('not ok'); 

    } 
}; 
XHR.send(JSON.stringify(queryResult)); 

如果JavaScript的运行,它会调用DoWork的方法在asp.net,但数据为空。并且在dereadystatechange上,它正在调用'not ok'-alert。

在我的控制台日志,我发现了错误:

XMLHttpRequest cannot load http://localhost:58476/home/dowork . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:8081 ' is therefore not allowed access.

是否有人知道如何解决这一问题?

回答

2

一个简单的解决方案是添加Access-Control-Allow-Origin。
您可以像添加到您的web.config文件:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

而且,你只能在POST请求发送数据时,你正在做一个GET请求。在发送方法更多信息检查w3schools
这意味着,你必须改变你的XHR.Open方法XHR.open("POST", 'localhost:58476/home/dowork', true);

+0

显示'ok'提示。但方法dowork中的数据仍然为空。如果解决这个问题怎么办? – user3432681

+0

是包含任何数据的queryResult? – Zippy

+0

是的,我也试着做var data ='someDate'; XHR.send(JSON.stringify(数据));但dowork()数据仍然为空。 – user3432681

1

显然,JavaScript代码是将请求发送到不同的服务器到一个地方的页面原是装从。

的第一台服务器侦听端口8081,而另一个正在侦听端口58476.

由于same-origin policy,你不能发送给其他任何服务器的AJAX请求超过了服务器的JS脚本是托管于。

虽然您可以关闭此安全功能,但不建议关闭它,除非您牢记任何人都可以在页面中注入Javascript代码并使其发送请求,这些请求可能包含敏感数据,如身份验证Cookie ,到他们的服务器。

+0

所以我不能从8081到另一个端口做httprequest?如果是这样,我该如何关闭此安全功能? – user3432681