我从REST API中提取了Json数据。成功之后,我创建了一个简单的警报,它将在$ http.get中显示Json结果。我找到了一个示例网址,指向Json数据在线进行测试,我得到的结果很好。但是当我尝试用我的URL指向api时,我没有得到任何结果(甚至没有警报)。但是,当我使用相同的URL并将其放入浏览器时,我的所有Json数据都在那里。关于可能导致此问题的任何想法或想法?感谢。
JavaScript(使用测试Json数据)
var myApp = angular.module('paladinMonitor', ["highcharts-ng"]);
myApp.controller('SizeCtrl', function ($scope, $http, $timeout) {
$http.get('http://ip.jsontest.com/?callback=showMyIP').success(function (data, status) {
alert(data)
});
答案 0 :(得分:0)
我遇到过类似的事情。 Restful Web服务必须使用Access-Control-Allow-Origin
标头来指定允许访问服务的来源。没有它,您可以通过将地址直接放在浏览器中来成功点击Web服务,但它无法通过您的应用程序运行。如果您的REST服务是用Java编写的,则可以查看this question以获取有关如何添加相应标头的详细信息。其他语言将使用类似的机制。
我的另一个猜测是Web服务需要授权才能访问。它可以在您的浏览器中正常工作,因为有一次您提供了正确的凭据和 你的浏览器缓存了它们。如果您的服务确实需要授权,请参阅"设置HTTP标头"有关如何添加相应标题的信息,请参阅this page部分。
答案 1 :(得分:0)
正如Alvin Thompson所提到的,您必须设置access-control-allow origin,并且还应该在服务器端设置access-control-allow-headers,access-control-allow-credentials。在我的情况下,我必须在我的WebAPIcontroller中执行此操作。这是因为为了让CORS工作(跨域),你必须让服务1(在我的情况下是RESTApi)允许服务2(客户端)的权限来接收它。为了实现这一点,我必须添加以下NuGet包
<强>的NuGet 强>
- Microsoft.AspNet.Cors NuGet package
- Microsoft.Owin.Cors NuGet package
安装完这些后,我转到了API项目的配置文件并添加了
API App_Start / WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
config.EnableCors();
}
然后在我的控制器中继承了API控制器,我引用了我安装的NuGet包并在客户端启用了CORS,这就是你设置源,头和方法的地方
YourController:ApiController
namespace YourNamespace.Controllers
{
[EnableCors(origins: "https://localhost:.....", headers: "*", methods: "*")]
public class YourController : ApiController
{
//The rest of your controller functionality
}
}
我遇到的其余问题是如何将Json Web Token变量传递到我的javascript文件中。我还在努力解决这个问题,当我弄清楚的时候,我也会给出答案。
要了解有关CORS问题的更多信息,这对我来说是最好的参考:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api