Angular $ http.get调用web api

时间:2016-01-26 22:35:23

标签: angularjs asp.net-mvc http cors http-get

我有两个运行的Web应用程序。 App1是角度SPA,App2是用c#编写的MVC web api。我正在执行Visual Studio 2015中的两个应用程序,在IIS Express中运行调试。

我的角度代码(App1)尝试使用以下(调试)代码调用App2中的api控制器:

$http.get('https://localhost:12345/api/values').then(function (response) {
            alert(response.data);
        }, function (err) { 
            alert(err);
        }).catch(function (e) {
            console.log("error", e);
            throw e;
        }) .finally(function () {
            console.log("This finally block");
        });

我总是打“警报(错误);” line - 它永远不会成功执行,并且err没有任何用处来表明问题可能是什么。

在Postman(适用于Chrome的插件)中,我可以确认我正在尝试对App2进行的调用正常。我究竟做错了什么?这可能是CORS的一个问题吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您遇到了CORS / SAME ORIGIN POLICY问题,可以在此处找到角度js中有关它的一些信息:How to enable CORS in AngularJs
这就是您在服务器站点中处理它的方式:http://docs.asp.net/projects/mvc/en/latest/security/cors-policy.html#cors-policy

或者您最好在控制台选项卡中打开开发人员工具,并向我们提供有关代码中发生的事情的更多信息。

答案 1 :(得分:0)

好吧我遇到的问题是在web api(MVC 6 - ASP.net 5)中,因为我必须允许来自我的角度网站的请求。 startup.cs文件添加了以下内容:

        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.AddCors();

            StartupInitialize(services);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseIISPlatformHandler();

            app.UseStaticFiles();

            app.UseCors(builder => builder.WithOrigins("http://localhost:12345/"));

            app.UseMvc();

            antiForgery = (IAntiforgery)app.ApplicationServices.GetService(typeof(IAntiforgery));
        }