Tengo una aplicación web que usa MVC y AngularJS, que se conecta a una API Web API 2, que configuré en un proyecto separado.
Actualmente puedo recuperar información de la Api sin problemas.
Sin embargo, cuando trato de hacer una publicación HTTP, no obtengo respuesta, originalmente estaba teniendo un problema con la falla de la solicitud previa al vuelo, ahora manejé esto en mi controlador, sin embargo, no envía la solicitud adecuada después de haber recibido un mensaje OK de vuelta.
He incluido mi código para Angular Factory y C# Controller en la API.
[EnableCors(origins: "*", headers: "*", methods: "*")] public class RegisterController : ApiController { public string Post() { return "success"; } public HttpResponseMessage Options() { return new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; } } var RegistrationFactory = function($http, $q, ApiAddress) { return function(model) { // $http.post(ApiAddress.getApiAddress() + '/Register/Post', model.ToString()); $http({ method: "POST", url: ApiAddress.getApiAddress() + '/Register/Post', data: model, headers: { 'Content-Type': 'application/json; charset=utf-8' } }).success(function(data) { $location.path("/"); }); } }; RegistrationFactory.$inject = ['$http', '$q', 'ApiAddress'];Editar:
Todavía no tengo ninguna alegría con esto, sin embargo, probé en Internet Explorer y funciona sin ningún problema.
Lo hice funcionar en Chrome al comenzar con la seguridad web deshabilitada, sin embargo, obviamente, esto no es ideal ya que no funcionará en una PC de usuario con la seguridad habilitada.
Veo que ha hecho una adaptación para CORS en el lado del servidor. Pero no puedo ver ninguna adaptación del lado del cliente (javascript). Es posible que deba agregar el código a continuación antes de llamar al servicio.
$http.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With'];Déjame saber si esto soluciona el problema. Funcionó para mí en todos los escenarios :)
Es extraño que tus GET funcionen, pero tus POST no.
Recomendaría ejecutar el código en Google Chrome con la seguridad web habilitada (para que podamos ver si sale mal) y con las Opciones de desarrollador F12 que se muestran.
Seleccione la pestaña Red, ejecute su código y observe lo que sucede cuando se llama al POST.
¿Su servicio devuelve un estado "200 OK" o algún otro valor?
¿Se devuelve algún tipo de respuesta?
Puede valer la pena probar esto y agregar una captura de pantalla de los resultados en su pregunta original. Podría ayudar a identificar la causa.
Todavía no tengo ninguna alegría con esto, sin embargo, probé en Internet Explorer y funciona sin ningún problema.
Por cierto, no tiene ninguna configuración de inicio de sesión único en su empresa, ¿verdad? Hemos tenido problemas en los que IE funciona bien, pero otros navegadores no permiten el inicio de sesión único. Solo un pensamiento...
CORS requiere una verificación previa de OPCIONES que tiene encabezados HTTP en su respuesta que le indican al navegador si tiene permiso para acceder al recurso.
Por ejemplo, encabezados de respuesta HTTP:
Access-Control-Allow-Headers: authorization Access-Control-Allow-Origin: *Debido a que tiene un controlador de opciones personalizado en su controlador C#, parece que esos encabezados HTTP no se devuelven, lo que detiene el navegador para realizar la llamada después de la verificación previa.
Evite el método de Opciones, y debería ser bueno.