了解Angular2外部服务的CORS处理
我遇到了一个场景,我试图从外部URL(“”)获取数据 在Angular2的情况下,我得到了CORS错误。根据我的理解,CORS需要在服务端启用,而不是在Angular2应用程序中启用 但我没有访问服务端的权限。因此,这是不可能做到的 现在,如果我将前端从Angular2更改为ASP.NET MVC核心UI,并使用System.NET.Http命名空间的httpClient类。我确实收到了回复和数据 我想知道这在ASP.NET MVC核心UI中是如何工作的,Angular2前端给了我CORS错误如何克服Angular2的这种外部服务CORS场景? 下面是我的两个案例和代码- 案例1:角度2 在本文中,我将使用Angular2版本RC4和npm版本3.9.6、节点版本4.4.7。浏览器chrome,编辑器:VScode 要执行应用程序,我只需使用“npmstart”命令了解Angular2外部服务的CORS处理,angular,Angular,我遇到了一个场景,我试图从外部URL(“”)获取数据 在Angular2的情况下,我得到了CORS错误。根据我的理解,CORS需要在服务端启用,而不是在Angular2应用程序中启用 但我没有访问服务端的权限。因此,这是不可能做到的 现在,如果我将前端从Angular2更改为ASP.NET MVC核心UI,并使用System.NET.Http命名空间的httpClient类。我确实收到了回复和数据 我想知道这在ASP.NET MVC核心UI中是如何工作的,Angular2前端给了我CORS错误如
this._http.get('http://knowstack.com/webtech/charts_demo/data.json')
.map(this.extractData)
.subscribe((response) => {
this.options11 = {
title : { text : 'knowstack' },
series : [{
name : 'knowstack',
data : response.json()
}]
};
},
(error) => {
this.errorMessage = <any>error
});
this.\u http.get('http://knowstack.com/webtech/charts_demo/data.json')
.map(此.extractData)
.订阅((响应)=>{
此选项11={
标题:{text:'knowstack'},
系列:[{
名称:“knowstack”,
数据:response.json()
}]
};
},
(错误)=>{
this.errorMessage=
案例2:ASP.NET MVC core 1.0、浏览器chrome、IDE:VS community 2015
public IActionResult Index()
{
字符串GET_DATA_URL=”http://knowstack.com/webtech/charts_demo/data.json";
HttpClient client1=新的HttpClient();
client1.BaseAddress=新Uri(获取数据和URL);
client1.DefaultRequestHeaders.Accept.Clear();
client1.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessageResponse1=client1.GetAsync(GET_DATA_URL).Result;
if(响应1.IsSuccessStatusCode)
{
var dataObjects=response1.Content.ReadAsStringAsync().Result;
var rootObj=JsonConvert.DeserializeObject(数据对象);
}
其他的
{
//处理故障响应
}
返回视图();
}
如果您需要我这边的任何信息,请告诉我。我猜ASP.NET代码会在您的服务器上执行,然后服务器会将HTML返回给您
CORS是一种内置于浏览器中的技术。浏览器可防止网站对不允许从外部访问的外国网站进行AJAX调用。因为在ASP.NET的情况下,此请求由您的后端完成。因为对于后端,这是一个正常的HTTP请求(就像您对浏览器所做的那样)它不需要检查CORS。因此,请求也不会发送“origin”头。CORS只用于防止来自外部主机的AJAX调用
在Angular2中,你可以做的是在你的域上创建一个代理,该代理绕过对外部服务的请求,就像请求发生在你的站点上一样,因此不需要CORS。谢谢你的回复。你能给我一些关于如何在我的域上创建代理的建议吗?你在使用什么Web服务器?Apache?nginx?对于开发,我正在使用lite服务器,如angular2 quickstart教程中所示。好的,我不知道如何使用此lite服务器,但这里有一个GitHub问题,它解决了代理问题:也许这有帮助
public IActionResult Index()
{
string GET_DATA_URL = "http://knowstack.com/webtech/charts_demo/data.json";
HttpClient client1 = new HttpClient();
client1.BaseAddress = new Uri(GET_DATA_URL);
client1.DefaultRequestHeaders.Accept.Clear();
client1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response1 = client1.GetAsync(GET_DATA_URL).Result;
if (response1.IsSuccessStatusCode)
{
var dataObjects = response1.Content.ReadAsStringAsync().Result;
var rootObj = JsonConvert.DeserializeObject<dynamic>(dataObjects);
}
else
{
// handle failure response
}
return View();
}