了解Angular2外部服务的CORS处理

了解Angular2外部服务的CORS处理,angular,Angular,我遇到了一个场景,我试图从外部URL(“”)获取数据 在Angular2的情况下,我得到了CORS错误。根据我的理解,CORS需要在服务端启用,而不是在Angular2应用程序中启用 但我没有访问服务端的权限。因此,这是不可能做到的 现在,如果我将前端从Angular2更改为ASP.NET MVC核心UI,并使用System.NET.Http命名空间的httpClient类。我确实收到了回复和数据 我想知道这在ASP.NET MVC核心UI中是如何工作的,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”命令

        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();
    }