了解Angular2中外部服务的CORS处理

时间:2016-08-26 15:28:26

标签: angular

我遇到过一种情况,我尝试从外部网址抓取数据(' 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();
    }

如果您需要我方提供的任何信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

我想ASP.NET代码在您的服务器上执行,然后服务器将HTML返回给您。

CORS是一种内置于浏览器中的技术。浏览器阻止网站向不允许从外部访问的外国网站进行AJAX调用。因为在ASP.NET的情况下,此请求由您的后端完成。因为对于后端,这是一个普通的HTTP请求(就像你使用浏览器一样),它不需要检查CORS。因此,请求也不会发送&#34;来源&#34;头。 CORS只是为了阻止来自外部主机的AJAX调用。

在Angular2中使用此功能的做法是在您的域上创建一个代理,该代理只是绕过对外部服务的请求,并且就像请求发生在您的站点上一样,因此不需要CORS。