我遇到过一种情况,我尝试从外部网址抓取数据(' OOM killer')
对于Angular2,我收到CORS错误。根据我的理解,CORS需要在服务端启用,而不是在Angular2应用程序中启用。
但我没有接入服务方面。因此,这是不可能的。
现在,如果我将我的前端从Angular2更改为ASP.NET MVC核心UI并使用httpClient类的System.Net.Http命名空间。我得到了回复和数据。
我想知道这是如何在ASP.NET MVC核心UI中工作的,Angular2前端给我带来了CORS错误。 如何在Angular2中克服这种外部服务CORS场景?
以下是我的2个案例以及代码 -
案例1:Angular2
在这里,我使用Angular2版本RC4和npm版本3.9.6,节点版本4.4.7。浏览器镶边,编辑:VScode
要执行应用程序,我只是使用'npm start'命令。
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
});
浏览器控制台出错:
http://knowstack.com/webtech/charts_demo/data.json
案例2:ASP.NET MVC核心1.0,浏览器chrome,IDE:VS社区2015
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();
}
如果您需要我方提供的任何信息,请与我们联系。
答案 0 :(得分:1)
我想ASP.NET代码在您的服务器上执行,然后服务器将HTML返回给您。
CORS是一种内置于浏览器中的技术。浏览器阻止网站向不允许从外部访问的外国网站进行AJAX调用。因为在ASP.NET的情况下,此请求由您的后端完成。因为对于后端,这是一个普通的HTTP请求(就像你使用浏览器一样),它不需要检查CORS。因此,请求也不会发送&#34;来源&#34;头。 CORS只是为了阻止来自外部主机的AJAX调用。
在Angular2中使用此功能的做法是在您的域上创建一个代理,该代理只是绕过对外部服务的请求,并且就像请求发生在您的站点上一样,因此不需要CORS。