Transacciones ajax entre dominios, el temido CORS - C#

Buenas noches cybernautas, hace unos días en el mundillo de desarrollo de software me tope con CORS, unas siglas que giran entorno a la data compartida entre dominios.
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&params1=' + 1 + '&params2=' + 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();
   List q = 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"

No hay comentarios:

Publicar un comentario