Tengo dos aplicaciones web ejecutándose. App1 es un SPA angular y App2 es una api web MVC escrita en c #. Estoy ejecutando ambas aplicaciones desde Visual Studio 2015, ejecutando depuración en IIS Express.

Mi código angular (App1) está intentando llamar a un controlador api en App2 usando el siguiente código (depuración):

$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");
        });

Siempre presiono la "alerta (err)"; line - nunca se ejecuta con éxito y err no tiene nada útil en ella para indicar cuál podría ser el problema.

En Postman (complemento para Chrome), puedo confirmar que la llamada que estoy tratando de hacer a App2 funciona bien. ¿Qué estoy haciendo mal? ¿Podría ser esto un problema con CORS?

¡Gracias de antemano!

0
Rob McCabe 27 ene. 2016 a las 01:35

2 respuestas

La mejor respuesta

Ok, el problema que tuve fue en la api web (MVC 6 - ASP.net 5) en el sentido de que tenía que permitir las solicitudes de mi sitio web angular. El archivo startup.cs tenía lo siguiente añadido:

        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));
        }
0
Rob McCabe 29 ene. 2016 a las 11:10

O experimenta el problema de CORS / MISMO ORIGEN POLÍTICA de que puede encontrar información al respecto en js angular aquí: Cómo habilitar CORS en AngularJs.
así es como lo maneja en el sitio del servidor en su caso: http://docs.asp.net/projects/mvc/en/latest/security/cors-policy.html#cors-policy

O es mejor que abra las herramientas del desarrollador en la pestaña de la consola y nos brinde más información sobre lo que sucedió en su código.

0
Community 23 may. 2017 a las 12:31