从一个asp.net Web应用程序发送JSON到另一个

时间:2012-11-25 15:42:08

标签: asp.net asp.net-mvc jquery asp.net-development-serv

我的解决方案包含两个asp.net MVC项目。一个是网络服务,另一个是普通网站,从前面提到的网络服务获取数据。

我的网络服务家庭控制器中有以下方法:

...
public JSONResult GetTeacher(){
   return JSON(new {TeacherName = this.teacher.name });
}

我正试图通过使用这个$ .ajax方法从其他网络应用程序(将成为网站)访问此方法:

$.ajax({
    type: 'GET',
    url: 'localhost:11370/Home/GetTeacher',
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        alert(JSON.stringify(response));
        $('#results').html('Welcome, ' + response.Name);
    },
    error: function (error) {
        alert(JSON.stringify(error));
    }
});

当我开始调试我的解决方案时,它会在不同的端口上打开两个Web开发服务器。结果,当$ .ajax调用发生时,我得到一个包含此信息的弹出窗口:

the page at localhost:11510 says:
"readystate":0, "responsetext": "" , "status":0, "statustext":"error"

当我尝试直接在Google Chrome控制台中运行脚本时,我收到以下消息:

XMLHttpRequest cannot load http://localhost:11370/Home/GetTeacher. 
Origin http://localhost:11510 is not allowed by Access-Control-Allow-Origin.

有关如何使用$ .ajax实际访问该方法的任何帮助将不胜感激。

编辑:我还尝试制作一个简单的html文件,看看如果我打电话给网络服务会发生什么。结果相同。此外,当我只输入方法的URL时,它工作正常并显示教师的名称。

1 个答案:

答案 0 :(得分:3)

由于浏览器中内置same origin policy restriction,您无法发送跨域AJAX请求。一种可能的解决方法是使用CORS,但由于并非所有浏览器都支持它,如果您需要跨浏览器解决方案,可以考虑使用JSONP

您可以查看我编写的this custom JsonpResult来说明如何从其他域中使用控制器操作。值得注意的是,jQuery的JSONP实现仅适用于GET请求。您无法POST到控制器操作跨域。如果您需要这样做,唯一可靠的方法是在主域上编写一个服务器端脚本,作为两个域之间的桥梁。然后,您将AJAX请求发送到这个新脚本,该脚本将请求委托给远程域并返回结果。