De acuerdo a wikipedia, nos dice que CORS es un mecanismo para restringir recursos entre dominios.
CORS, presente en el desarrollo de software hace unos días:
Requerimiento: Se tiene una ruta http://aaa.com/ que quiere consumir datos a través de ajax de la ruta http://bbb.com/get/datos. Este trabajo se debe realizar a nivel del Frontend.
Bueno, del lado del dominio A tenemos que realizar una llamada utilizando una función de angular.
$http.jsonp('http://bbb.com?callback=JSON_CALLBACK¶ms1=' + 1 + '¶ms2=' + 2). success(function(data) { console.log("data >>>", data); }). error(function (err) { console.log("error >>>", err); });
Ahora del lado B, trabajamos en el backend para permitir la salida de datos. Para ello primero implementamos la siguiente clase:
using System.Web.Script.Serialization; public class JsonpResult : JsonResult { object data = null; public JsonpResult() { } public JsonpResult(object data) { this.data = data; } public override void ExecuteResult(ControllerContext controllerContext) { if (controllerContext != null) { HttpResponseBase Response = controllerContext.HttpContext.Response; HttpRequestBase Request = controllerContext.HttpContext.Request; string callbackfunction = Request["callback"]; if (string.IsNullOrEmpty(callbackfunction)) { throw new Exception("Callback function name must be provided in the request!"); } Response.ContentType = "application/x-javascript"; if (data != null) { JavaScriptSerializer serializer = new JavaScriptSerializer(); Response.Write(string.Format("{0}({1});", callbackfunction, serializer.Serialize(data))); } } } }
En nuestro controlador instanciamos la clase antes creada.
public class equisController : Controller { public JsonResult getDatos() { CodeFirst context = new CodeFirst(); Listq = context.ModelEquis.toList(); JsonpResult result = new JsonpResult(q); return result; } }
Al final podemos comprobar que la data es transmitida y podemos mostrarlo en un gustoso "console.log"