Habilitando CORS en ASP.NET Web API 2

La seguridad de los navegadores Web previene que una página Web realice peticiones AJAX hacia otro dominio. Esta restricción es llamada la Política del Mismo Origen (same-origin policy), y previene que un sitio malicioso pueda leer datos sensitivos de otro sitio.

Dos URLs son parte del mismo origen si tienen el mismo Esquema, Host y Puerto.

Los siguientes URLs tienen el mismo origen:

http://northwind.com/api/products
http://northwind.com/api/categories

Los siguientes URLs tienen orígenes diferentes de los dos anteriores:

http://northwind.net/api/products <= Diferente dominio
http://northwind.com:8000/api/products <= Diferente puerto
https
://northwind.com/api/products <= Diferente esquema
http://www.northwind.com/api/products <= Diferente subdominio

Nota: Internet Explorer y Microsoft Edge no consideran el puerto cuando comparan orígenes.

Es importante entender que la política same-origin NO evita que el navegador envíe la petición, en lugar de eso, evita que la aplicación vea la respuesta. Cuando una petición AJAX es enviada al servicio Web, el navegador Web SI envía la petición al servicio y la respuesta es exitosa. Sin embargo, la invocación AJAX devuelve un error.

Cross Origin Resource Sharing (CORS) es un estándar W3C que permite a un servidor configurar la política same-origin. Utilizando CORS, un servidor puede permitir explícitamente algunas peticiones de otros dominios (cross-origin) y, al mismo tiempo, rechazar otras.

El siguiente video forma parte del entrenamiento en línea “Implementando Web API en ASP.NET MVC” y muestra cómo habilitar CORS en ASP.NET Web API 2.

Si no estás participando en el entrenamiento y deseas conocer más acerca de CORS, puedes consultar el siguiente enlace:

Enabling Cross-Origin Requests in ASP.NET Web API 2
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api   

Saludos!

Publicado en C#, Entrenamiento, JavaScript, jQuery, MVC, Web API | Deja un comentario

Implementando Web API en ASP.NET MVC

La mayoría de las aplicaciones Web, aplicaciones de escritorio o aplicaciones móviles, requieren de una integración con sistemas externos. Una forma recomendada para implementar esa integración es a través de APIs Web. Debido a esto, es importante conocer la forma de crear y utilizar APIs Web (Web APIs) para poder implementar adecuadamente la interacción de las aplicaciones con sistemas externos.

Podemos utilizar APIs Web para implementar servicios de Transferencia de Estado Representacional (Representational State Transfer o REST) en una aplicación. Los servicios REST ayudan a reducir la sobrecarga de la aplicación y limitan los datos que son transmitidos entre los sistemas cliente y servidor.

Para poder implementar de forma efectiva APIs Web estilo REST en una aplicación, es necesario conocer la forma de invocar a los servicios de APIs Web desde aplicaciones ejecutándose en distintas plataformas, tales como, aplicaciones .NET, jQuery, Android, iOS, Windows Phone o Windows 10.

¿Qué es Web API?

API es un acrónimo de Application Programming Interface (Interfaz de Programación de Aplicaciones). Tradicionalmente, de forma local, una API se expone a través de archivos DLL. En la Web, una API se expone a través de Servicios Web que permiten que las aplicaciones cliente obtengan y realicen operaciones con los datos que el servicio expone.

Existen distintos tipos de Servicios Web que se caracterizan principalmente por la forma en que realizan la comunicación con el cliente y el formato en que intercambian información. Un ejemplo de estos servicios son los Servicios Web que utilizan SOAP (Simple Object Access Protocol) como protocolo de comunicación e intercambio de datos en formato XML. En la actualidad, una opción para exponer APIs en la Web es mediante Servicios REST. REST es un acrónimo de Representational State Transfer (Transferencia de Estado Representacional) y es un estilo de arquitectura de software para crear APIs que utilicen HTTP como su método de comunicación subyacente. El término REST se originó en el año 2000, en una tesis doctoral sobre la Web escrita por Roy Fielding, uno de los principales autores de la especificación del protocolo HTTP.

ASP.NET Web API es un Framework que forma parte de ASP.NET MVC y que permite construir APIs habilitadas para REST. Las APIs habilitadas para REST ayudan a que sistemas externos utilicen la lógica de negocios implementada en una aplicación, incrementando la reutilización de dicha lógica.

Web API facilita la comunicación de dos vías entre el cliente y el servidor a través de tareas tales como:

  • Indicar a una aplicación realizar una tarea específica.
  • Leer datos.
  • Actualizar datos.

Web API permite que los desarrolladores obtengan información de negocio mediante el uso de REST sin crear peticiones XML complicadas tal como en los servicios SOAP. Web API recibe las peticiones directamente en los URLs, eliminando de este modo la necesidad de peticiones complicadas. Por ejemplo, el siguiente URL obtiene información de una entidad Product con el identificador 1.

http://northwind.com/api/products/1

Web API utiliza el URL de las peticiones y obtiene resultados en formato JSON. JSON es un acrónimo de JavaScript Object Notation y es un formato ligero para intercambio de datos. Para las personas resulta de fácil lectura y escritura mientras que para las máquinas les resulta fácil analizarlo y generarlo. JSON está basado en un subconjunto del lenguaje de programación JavaScript. Es un formato de texto que es completamente independiente del lenguaje, pero utiliza convenciones que son familiares para los programadores de lenguajes de la familia C, incluyendo C++, C#, Java, JavaScript, Perl, Python y muchos otros. Estas propiedades hacen que JSON sea ideal para el intercambio de datos.

Para mayor información acerca de JSON les recomiendo visitar el siguiente enlace:

Introducing JSON
http://json.org

El siguiente código muestra una respuesta de una petición Web API en formato JSON.

[{“Id”:1,”Name”:”Chai”,”Category”:”Beverages”,”Price”:18.0000},{“Id”:2,”Name”:”Chang”,”Category”:”Beverages”,”Price”:19.0000},{“Id”:3,”Name”:”Aniseed Syrup”,”Category”:”Condiments”,”Price”:10.0000}]

REST y Web API permiten que todos los diferentes tipos de aplicaciones, incluyendo aplicaciones para dispositivos móviles, interactúen con servicios. En particular, REST y Web API proporcionan los siguientes beneficios para aplicaciones móviles:

  • Reducen el poder de procesamiento necesario para crear mensajes de petición complejos para obtener datos.
  • Mejoran el rendimiento de la aplicación reduciendo la cantidad de intercambio de datos entre el cliente y el servidor.

Los siguientes videos proporcionan más información acerca de Web API. El texto publicado aquí, así como los videos, forman parte del entrenamiento en línea “Implementando Web API en ASP.NET MVC” impartido por TI Capacitación. En el entrenamiento se enseña a crear servicios REST con Web API y la forma de consumirlos desde aplicaciones ASP.NET MVC, WPF, UWP, Windows Phone, iOS y Android con Xamarin. Pueden solicitar una beca para participar gratuitamente en la lección 1 de ese entrenamiento, enviando un correo a informes@ticapacitacion.com.

¿Qué es Web API?

Creando una API Web con el Framework ASP.NET Web API 

Contenido del entrenamiento en línea: Implementando Web API en ASP.NET MVC

 

Saludos!

 

 

 

 

Publicado en Varios | Deja un comentario

Recursos para desarrollar aplicaciones Universal Windows Platform

Con el lanzamiento de Windows 10 y Visual Studio 2015, los desarrolladores tenemos ahora la oportunidad de desarrollar aplicaciones para la Plataforma Universal de Windows.

Si les interesa empezar a desarrollar aplicaciones UWP, les dejo aquí algunos enlaces que pueden ser de su interés.

Saludos!


Herramientas gratuitas: Visual Studio y Visual Studio Online

Visual Studio Community es la herramienta que nos permite crear aplicaciones para cualquier plataforma, incluidos los dispositivos con Windows, iOS y Android.

Visual Studio Online es un servicio que permite la Colaboración y Administración de proyectos de software de manera que la personas que integran el equipo de desarrollo pueda centrarse en crear características y solucionar errores.


Novedades para desarrolladores de Windows 10

Este sitio contiene toda la información que los desarrolladores podrían necesitar para desarrollar aplicaciones UWP.


Iniciar en el desarrollo de aplicaciones Windows

En este sitio se puede encontrar información necesaria para empezar a desarrollar aplicaciones para la Plataforma Universal de Windows.


Diseño de aplicaciones UWP

Este sitio contiene información para aprender a diseñar aplicaciones UWP adaptativas que se vean apropiadamente en todos los dispositivos Windows 10, desde teléfonos y tabletas hasta PCs y Surface Hub.


Desarrollo de aplicaciones UWP

Este sitio contiene ejemplos y referencia de APIs para aplicaciones UWP.


Publicación de aplicaciones

Sitio para publicar aplicaciones UWP a la Tienda de Windows.


Cursos de Windows 10 en MVA


Videos en Channel 9


Windows 10 Developer Readiness – Videos en Channel 9


Nuevas características en C# 6 – Videos en Channel 9

 

Publicado en C#, Universal Windows Platform, Windows 10 | Deja un comentario

Nuevas características en C# 6

Para que conozcan más acerca de C#, les dejo aquí una serie de videos en Channel 9 que muestran las nuevas características disponibles en C# 6.

  1. Métodos de extensión Add en Inicializadores de Colecciones
  2. Inicializadores de Índice  (Index initializers)
  3. Expresiones Nameof
  4. Operador Null-Conditional
  5. Interpolación de Cadenas  (String interpolation)
  6. using static
  7. Uso del operador await en bloques catch y finally
  8. Filtros de Excepción  (Exception filters)
  9. Inicializadores para propiedades Auto-Implementadas
  10. Propiedades Auto-implementadas de sólo lectura
  11. Miembros con una Expresión como cuerpo  (Expression-bodied function members)

Si lo desean, pueden acceder a estos mismos videos y a manuales de apoyo en formato PDF de forma gratuita a través del aula virtual de TI capacitación en el siguiente enlace:

http://ticapacitacion.com/registro/cs6

Saludos!

Publicado en C#, Entrenamiento | Deja un comentario

Windows 10 Developer Readiness – Videos en Channel 9

Ahora que se ha liberado Windows 10, Visual Studio 2015 y el SDK de Windows 10, está todo listo para empezar a desarrollar aplicaciones para la Plataforma Universal de Windows.

Si tienen interés en empezar a desarrollar aplicaciones UWP, les dejo aquí algunos recursos que les pueden ser de utilidad.

Videos en Channel 9 del entrenamiento Windows 10 Developer Readiness.

  1. Presentando a la Plataforma Universal de Windows
  2. El viaje de convergencia
  3. La Plataforma Universal de Windows
  4. Demo: Hola, Dispositivos
  5. Aplicación Windows
  6. Extensiones de la Plataforma
  7. Resumen
  8. Tecnologías Microsoft para desarrollo
  9. Tecnologías Puente (bridge technologies)
  10. Diseño Adaptativo
  11. Demo: Diseño Adaptativo
  12. Código Adaptativo
  13. Demo: Código Adaptativo
  14. IDE Visual Studio
  15. Microsoft .NET Native
  16. Presentando a “Template 10”

Pueden acceder a estos mismos videos y a manuales de apoyo en formato PDF de forma gratuita a través del entrenamiento en aula virtual de TI capacitación en el siguiente enlace:

http://ticapacitacion.com/promociones/win10dev.html

Finalmente, este es un video en Channel 9 del evento Windows 10 Developer Readiness del 9 de Junio pasado.

https://channel9.msdn.com/Events/MVP-Virtual-Conference/Windows-10-Developer-Readiness-Powered-by-MVPs/Colombia/player

Saludos!

Publicado en C#, Universal Windows Platform, Windows 10 | 2 comentarios

¿Y su Nube de que la quiere? ¿Administrada o no Administrada?

Hace unos años cuando se daba a conocer lo que antes era Windows Azure, hoy Microsoft Azure, empecé a explorar sus servicios. Tuve la oportunidad de trabajar en un proyecto de entrenamiento sobre Azure para toda habla hispana junto con Rubén Mugártegui que en aquel entonces trabajaba en Microsoft México.

El entrenamiento se realizó en línea sobre una plataforma de Aula Virtual desarrollada con tecnología Microsoft y corriendo sobre la misma Nube: Azure.

En aquellos tiempos, los servicios que ofrecía Azure eran pocos, prácticamente alcanzamos a cubrir todos los servicios en un entrenamiento de 6 semanas.

Hoy en día, los servicios que ofrece Azure han aumentado considerablemente, tan considerablemente que se necesitarían diversos entrenamientos para poder cubrir el rango actual de servicios que ofrece.

Los servicios que ofrece Microsoft Azure son de primer nivel. Una persona acostumbrada a trabajar con productos Microsoft podría utilizar los servicios sin mucho problema y, hasta cierto punto, sin ayuda. Quiero hacer énfasis en “hasta cierto punto” ya que considero que los servicios que ofrece Microsoft Azure aumentan rápidamente que no creo que haya una persona que pueda ser experta en absolutamente todos los servicios. En la actualidad, la evolución constante de Microsoft Azure y la adición de nuevas características, pueden hacer de Azure todo un desafío para adoptarlo y administrarlo. 

Pero, ¿Qué pasa con personas que no están familiarizadas con las tecnologías Microsoft y que desean utilizar los servicios de la nube Microsoft Azure? Mi punto de vista es que necesitan el apoyo de los expertos. Microsoft Azure ofrece toda su infraestructura de cómputo en la Nube pero da la impresión de que hace falta la cercanía y la presencia del soporte técnico humano, alguien que esté a tu lado dándote soporte en todo momento para que hagas un buen uso de la infraestructura de cómputo.

Microsoft se apoya de Partners para dar soporte a sus productos.

Una noticia que me pareció muy interesante es que ahora Rackspace con todo el Soporte Fanático que lo caracteriza, ha anunciado su Soporte Fanático para Microsoft Azure, una solución de nube administrada que reduce la complejidad de Azure proporcionando planificación, guía y asistencia en la implementación.

A través del Soporte Fanático para Microsoft Azure de Rackspace, podemos utilizar todo lo que ofrece Microsoft Azure con un valor agregado de soporte, monitoreo proactivo, actualizaciones, antivirus y el acceso 24x7x365 a ingenieros expertos en Windows y Linux de Rackspace que pueden ayudarnos cuando tengamos algún problema.

Al dejar a Rackspace la responsabilidad de la administración de la Nube, nos aseguramos de obtener lo mejor de Microsoft Azure.

En el siguiente enlace pueden encontrar más información sobre el Soporte Fanático para Microsoft Azure de Rackspace.

http://www.rackspace.com/microsoft/managed-azure-cloud

Y ustedes ¿Cómo prefieren su Nube Azure? ¿Administrada o no Administrada?

Saludos.

Publicado en Cloud Computing, Windows Azure | Deja un comentario

Consumiendo una Web API desde una aplicación de la Plataforma Universal de Windows

En esta guía, describiremos los pasos necesarios para consumir una Web API a través de una aplicación UWP.  La aplicación será desarrollada implementado el patrón MVVM.

El siguiente enunciado describe el objetivo de la aplicación que realizaremos.

“Desarrollar una aplicación UWP que permita generar un código de invitación para participar en el entrenamiento Windows 10 Developer Readiness. La aplicación deberá solicitar el Nombre, Apellidos y Correo electrónico de la persona interesada y una vez que los datos sean proporcionados, la aplicación proporcionará a la persona interesada un código con el cual podrá participar en el entrenamiento.

Para obtener el código de invitación, la aplicación enviará los datos proporcionados por el usuario a una Web API, la Web API devolverá como respuesta el código de invitación.”

Requisitos:

Al momento de realizar esta guía, las versiones finales de Windows 10 y Visual Studio 2015 no se han liberado, por lo tanto, utilizaremos lo siguiente:

  • Windows 10 Insider Preview Build 10130. Únete al Programa Windows Insider que ofrece información privilegiada. Sigue las instrucciones para instalar Windows 10 Insider Preview en el siguiente enlace: http://insider.windows.com/
  • Microsoft Visual Studio 2015 RC. El SDK de Windows 10 y todas las herramientas, emuladores, bibliotecas, encabezados y otros archivos que necesitas para desarrollar aplicaciones para Windows 10 se incluyen en esta versión de Visual Studio. También se incluye una versión actualizada del Kit para la certificación de aplicaciones en Windows. No es necesario descargar ninguna otra herramienta para desarrollar aplicaciones para Windows 10.  Sigue las instrucciones del Programa Windows Insider para instalar las herramientas de desarrollo de Windows 10 para Visual Studio 2015 RC en el siguiente enlace: https://go.microsoft.com/fwlink/p/?LinkId=534785
  • Plantilla Template 10 Blank.  Esta es una plantilla exportada de un proyecto de Visual Studio y forma parte del proyecto Template 10. Se recomienda el uso de la plantilla Blank como base para el desarrollo de aplicaciones UWP ya que proporciona implementaciones importantes de muchos de los Patrones, entre ellos MVVM, necesarios para construir aplicaciones UWP ricas y fáciles de mantener. Para obtener la versión más reciente de esta plantilla puedes acceder al repositorio Git en la dirección: http://aka.ms/template10. La versión que utilizaremos en esta guía puedes descargarla en el siguiente enlace: Blank.

Tarea 1: Instalar la plantilla Template 10 Blank 

  1. Abre una ventana del Explorador de Archivos de Windows y navega a This PC > Documents > Visual Studio 2015 > Templates > ProjectTemplates > Visual C#.
  2. Crea una nueva carpeta llamada Template10.
  3. Abre la carpeta Template10 y copia ahí el archivo Blank.zip.
  4. Para verificar que la plantilla se haya instalado correctamente, abre Visual Studio 2015.
  5. Crea un nuevo proyecto utilizando la plantilla Blank. La plantilla se encontrará en el nodo Installed > Templates > Visual C# > Template10.

image

Tarea 2: Crear el Modelo de la aplicación

  1. La Web API que consumiremos recibe los datos a través de un objeto Student. Agrega la siguiente clase Modelo en la carpeta Models de la aplicación.
  2. public class Student
    {
        public string FirstName { get; set; } = string.Empty;
        public string LastName { get; set; } = string.Empty;
        public string Email { get; set; } = string.Empty;
    }

  3. La Web API que consumiremos devuelve el código de invitación a través de un objeto Token. Agrega la siguiente clase Modelo en la carpeta Models de la aplicación.
  4. public class Token
    {
        public string Value { get; set; } = string.Empty;
    }

  5. El código de acceso a datos lo pondremos en una clase Modelo que servirá de repositorio. Agrega la siguiente clase Modelo en la carpeta Models de la aplicación.
  6. public static class Repository
    {
    }

  7. En la clase Repository agregaremos un método con el código para invocar a la Web API y obtener el código de invitación.  Agrega el siguiente código para importar el espacio de nombres que tiene la clase HttpClient. A través de esta clase consumiremos la Web API.

    using System.Net.Http;

  8. La Web API recibe y devuelve el resultado en formato JSON. Para poder serializar y Deserializar la información, utilizaremos la clase JsonConvert disponible en el Framework Newtonsoft.Json. Agrega a la aplicación, la referencia al paquete NuGet Newtonsoft.Json.

    image

  9. Agrega a la clase Repository el siguiente código para importar el espacio de nombres que define la clase JsonConvert.

    using Newtonsoft.Json;

  10. Agrega el siguiente código a la clase Repository para definir el método GetToken que enviará los datos a la Web API y devolverá el Código de Invitación que obtendrá como respuesta de la llamada a la Web API.
  11. public static string GetToken(Student data)
    {
        string Token = null;

        // Definir el URL de la aplicación Web API
        string URLWebAPI = “http://mvdemos.cloudapp.net/Win10/ “;

        // Crear un objeto HttpClient para acceder a la Web API
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(URLWebAPI);

        // Especificar que estamos aceptando datos JSON
        client.DefaultRequestHeaders.Accept.Add(
            new System.Net.Http.Headers.
            MediaTypeWithQualityHeaderValue(“application/json”));

        // Serializar los datos del estudiante a formato JSON
        string StudentJSON = JsonConvert.SerializeObject(data);

        // Obtener un tipo HttpContent para pasarlo en la petición
        StringContent Content = new StringContent(StudentJSON,
            System.Text.Encoding.UTF8, “application/json”);

        // Realizar la llamada al recurso Web API y obtener la respuesta
        HttpResponseMessage response = client.PostAsync(
            “api/Win10Dev”, Content).Result;

        // Verificar si la respuesta fue exitosa
        if (response.IsSuccessStatusCode)
        {
            // Deserializar el resultado obtenido
            Token token =
                JsonConvert.DeserializeObject<Token>(
                    response.Content.ReadAsStringAsync().Result);
            // Obtener el valor del código de invitación
            Token = token.Value;
        }
        else
        {
            // La respuesta no fue exitosa. Devolver el estatus de error.
            Token = string.Format(“{0} ({1})”,
                response.StatusCode, response.ReasonPhrase);
        }
        return Token;
    }

Tarea 3: Definir el ViewModel de la aplicación

  1. Abre el archivo ViewModels\MainPageViewModel.cs.
  2. Importa el espacio de nombres de la carpeta Models.
  3. Modifica la clase MainpageViewModel para definir el ViewModel de la aplicación. La clase deberá ser similar a la siguiente.
  4. public class MainPageViewModel : Mvvm.ViewModelBase
    {
        public Student Student{ get; set; }= new Student();

        private string _Token = string.Empty;
        public string Token { get { return _Token; } set { Set(ref _Token, value); } }

        public void Send()
        {
            Token = Repository.GetToken(Student);
        }
    }

Tarea 4: Definir la Vista de la aplicación

  1. Abre el archivo Views\MainPage.xaml.
  2. En la vista XAML, remplaza el contenido del control RelativePanel para que quede de la siguiente forma.
  3. <RelativePanel Padding=”12,0,0,0″ Grid.Row=”1″
                          MaxWidth=”900″ HorizontalAlignment=”Center”>
               <Image x:Name=”Image” Source=”/Images/Windows10.PNG” MaxWidth=”900″ Margin=”10″ />
               <TextBox x:Name=”FirstName”  Margin=”10″
                        Header=”Nombre:” Width=”200″ 
                    Text=”{x:Bind ViewModel.Student.FirstName, Mode=TwoWay}”
                                RelativePanel.Below=”Image” />

               <TextBox x:Name=”LastName” Margin=”10″
                        Header=”Apellidos:” Width=”200″
                        Text=”{x:Bind ViewModel.Student.LastName, Mode=TwoWay}”
                        RelativePanel.Below=”FirstName”/>

               <TextBox x:Name=”Email” Margin=”10″
                        Header=”Correo Electrónico” Width=”300″
                        Text=”{x:Bind ViewModel.Student.Email, Mode=TwoWay}”
                        RelativePanel.Below=”LastName”/>

               <Button x:Name=”Send” Margin=”10″
                       Content=”Solicitar código”
                           Click=”Send_Click”   
                           RelativePanel.Below=”Email”
                           Background=”#0080FF” Foreground=”white”/>

               <TextBox x:Name=”Token” Margin=”10″
                        Header=”Código de invitación” Width=”300″
                        Text=”{x:Bind ViewModel.Token, Mode=TwoWay}”
                        RelativePanel.Below=”Send”
                         />
           </RelativePanel>

  4. Examina detenidamente el código XAML agregado .
    El código está utilizando un nuevo tipo de enlace conocido como Compiled Binding. Este nuevo tipo de Enlace requiere que las propiedades que se están enlazando se encuentren definidas en la clase MainPage, en otras palabras, en el code-behind. Abre el archivo code-behind MainPage.xaml.cs.
  5. Localiza la siguiente línea de código en el constructor de la clase.

    DataContextChanged += (s, e) => ViewModel = DataContext as MainPageViewModel;

    Este código, almacena en la propiedad ViewModel definida líneas más abajo en el mismo archivo, el valor del Contexto de Datos (una instancia del ViewModel) para permitir el enlace a datos compilado.

  6. En la clase MainPage, agrega el siguiente código para invocar al método Send definido en el ViewModel cuando el usuario dé Clic en el botón “Solicitar código”.
  7. private void Send_Click(object sender, RoutedEventArgs e)
    {
        ViewModel.Send();
    }

  8. Compila y ejecuta la aplicación.
    Deberá mostrarse la aplicación similar a la siguiente.

    image

  9. Proporciona tu Nombre, Apellidos, Correo y da clic en Solicitar código.
    Te será mostrado el código de invitación.

    image

Con este paso hemos finalizado la creación de la aplicación. Espero les sea útil.

 

 

 

   

 

Publicado en C#, Universal Windows Platform, UWP, Windows 10 | Deja un comentario