Pop

Curso básico programación C# - 64. Creando nuestro propio buscador (2) - Visual Studio 2017


64. Nuestro propio buscador  de peliculas (2)

 -  En este capítulo del curso de programación en c# con visual studio 2017 ,  continuaremos con nuestro nuevo proyecto consistente en crear nuestro propio buscador. La idea es utilizar la API que nos proporciona https://www.themoviedb.org , para realizar consultas  y mostrar la información de las busquedas solicitadas en pantalla.

- En la entrada anterior comenzamos este nuevo proyecto y en este empezaremos con el desarrollo. En este video veremos como crear nuestra plantilla de proyecto y como conseguimos nuestra clave para consumir la API para empezar a realizar peticiones. Una vez tenemos nuestra clave podremos empezar a realizar peticiones y obtener nuestras respuestas en formato JSON.

- En el video esta pixelada la clave para hacer peticiones porque identifica de manera unívoca a quien realiza la petición. La idea es que los que estés interesados en seguir este tutorial obtengaís vuestra propia clave.


- Una vez tenemos nuestra clave ya podemos hacer las peticiones. De momento os dejo el código fuente de la página aspx y de la pagina Master donde esta nuestro buscador. Aunque en esta ocasión el proyecto tiene muchas más cosas y debéis ser vosotros los que os generéis vuestro propio proyecto utilizando la plantilla que hemos visto en el video.

  •  Default.aspx

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BuscadorWebPeliculas._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <div class="row">
      
            <div style="text-align: center; margin-top:5%">
        
            <asp:Label runat="server" Text="<b>Mis pelis:</b>" Font-Size="Medium"></asp:Label>
            <asp:TextBox ID="txtBuscador" runat="server" Width="30%" placeholder="Busca tus peliculas favoritas:"></asp:TextBox>
            <asp:ImageButton runat="server" ImageUrl="images/magnifier-24270_640.png"  width="21px" height="20px" OnClick="Unnamed2_Click"/>
           <asp:Label runat="server" Text="" ID="lblResultado"></asp:Label>
            </div>
        
    </div>

</asp:Content>

  • MasterPage
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="BuscadorWebPeliculas.SiteMaster" %>

<!DOCTYPE html>

<html lang="es">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%: Page.Title %> - Mi aplicación ASP.NET</title>

    <asp:PlaceHolder runat="server">
        <%: Scripts.Render("~/bundles/modernizr") %>
    </asp:PlaceHolder>

    <webopt:bundlereference runat="server" path="~/Content/css" />
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />

</head>
<body>
    <form runat="server">
        <asp:ScriptManager runat="server">
            <Scripts>
                <%--Para obtener más información sobre la unión de scripts en ScriptManager, consulte https://go.microsoft.com/fwlink/?LinkID=301884 --%>
                <%--Scripts de marco--%>
                <asp:ScriptReference Name="MsAjaxBundle" />
                <asp:ScriptReference Name="jquery" />
                <asp:ScriptReference Name="bootstrap" />
                <asp:ScriptReference Name="respond" />
                <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
                <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
                <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
                <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
                <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
                <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
                <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
                <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
                <asp:ScriptReference Name="WebFormsBundle" />
                <%--Scripts del sitio--%>
            </Scripts>
        </asp:ScriptManager>

        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" runat="server" href="~/">Mis Pelis</a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a runat="server" href="~/">Inicio</a></li>
                        <li><a runat="server" href="~/About">Acerca de</a></li>
                        <li><a runat="server" href="~/Contact">Contacto</a></li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="container body-content">
            <asp:ContentPlaceHolder ID="MainContent" runat="server">
            </asp:ContentPlaceHolder>
            <hr />
            <footer>
                <p>&copy; <%: DateTime.Now.Year %> - Mis Pelis</p>
            </footer>
        </div>

    </form>
</body>
</html>

Curso básico programación C# - 63. Creando nuestro propio buscador (1) - Visual Studio 2017


63. Nuestro propio buscador  de peliculas (1)

 -  En este capítulo del curso de programación en c# con visual studio 2017 ,  empezaremos un nuevo proyecto consistente en crear nuestro propio buscador. La idea es utilizar la API que nos proporciona https://www.themoviedb.org , para realizar consultas  y mostrar la información de las busquedas solicitadas en pantalla .

- La API que nos proporciona esta web es gratuita pero es necesario registrarse en la página para poder utilizarla. La idea es que cada uno consuma la API que más le interese y utilizar esta entrada y las siguientes como guia.En el video lo explico más claramente:



-Existe información más detallada de la API en la propia web. Aqui os dejo un enlace a la documentación: https://www.themoviedb.org/documentation/api

- En las siguientes  entradas de  este blog empezaremos el desarrollo de esta aplicación. Es conveniente antes de continuar que repaséis los videos en los que hacemos peticiones a un API REST. Os dejo a continuación los más importantes para entender los siguientes capítulos del curso:

  • Consumiendo método POST:


  •  Consumiendo método GET

 - En la siguiente entrada comenzaremos la implementación de nuestro buscador.

Curso básico programación C# - 62. Consumiendo dll - Visual Studio 2017

62-.Consumiendo dll

 - En este capítulo del curso de programación en c# con visual studio 2017 , vamos a consumir nuestra dll desde un proyecto de consola. En la entrada anterior creamos nuestra propia dll (ver entrada) y ahora nos disponemos a llamar a los diferentes métodos que estén accesibles. Los métodos que podremos utilizar son los que tengamos definidos como públicos.

- La forma de usar las dll es similar a la manera en que consumimos un web service, con la diferencia que en el caso de las bibliotecas de clases el fichero que estamos consumiendo lo tendremos alojado en nuestra máquina. En el caso de los servicios web llamamos a una dirección url para obtener los métodos que queremos consumir, en las bibliotecas de clases agregamos una referencia a un ruta local donde tendremos almacenada nuestra dll. En el video lo podemos ver con más detalle:



  • Recordad que para poder usar la biblioteca de clases debemos agregarla como referencia al proyecto.Para comprobar si realmente hemos agregado correctamente miramos si cuelga de dependencias:


  • También os dejo el código fuente del proyecto de pruebas desde el que consumimos nuestra dll:

using System;
using PruebaDll;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        
            Numeros x = new Numeros();
            Console.WriteLine(x.Resta(7, 4).ToString());
            Console.WriteLine(x.Resta(7.47f, 4).ToString());
            Console.WriteLine(x.Suma(7, 4).ToString());
            Console.WriteLine(x.Suma(7.47f, 4).ToString());
            Console.ReadLine();
        }
    }
}

Curso básico programación C# - 61. Creando nuestras propias dll - Visual Studio 2017

61-.Creando nuestras propias dll 

 - En este capítulo del curso de programación en c# con visual studio 2017,una vez finalizados los  ejemplos de  servicios web(vistos en entradas anteriores) vamos a construir nuestra propia biblioteca de clases para poder utilizarla en nuestros proyectos.

- Una biblioteca de clases define los tipos y los métodos que se llaman desde una aplicación.  Una vez terminada la biblioteca de clases podemos decidir si quiere distribuir como un componente de terceros o si se quiere incluir como un componente empaquetado con una o varias aplicaciones. En el ejemplo que muestro en el video simplemente nos vamos a crear una clase que permita realizar  sumas y resta de números.Para entender el concepto del uso de una dll nos sirve:



  •  Os dejo también el código fuente del video:

using System;
using System.Collections.Generic;
using System.Text;

namespace PruebaDll
{
   public class Numeros
    {

        /// <summary>
        /// Suma de numeros enteros
        /// </summary>
        /// <param name="num">Primer operador</param>
        /// <param name="num2">Segundo operador</param>
        /// <returns>Resultado de la suma</returns>
        public int Suma(int num, int num2)
        {
            return num + num2;
        }

        /// <summary>
        /// Resta de números enteros
        /// </summary>
        /// <param name="num">Primer operador</param>
        /// <param name="num2">Segundo operador</param>
        /// <returns>Resultado</returns>
        public int Resta(int num, int num2)
        {
            return num - num2;
        }

        /// <summary>
        /// Suma de numeros decimales
        /// </summary>
        /// <param name="num">Primer operador</param>
        /// <param name="num2">Segundo operador</param>
        /// <returns>Resultado</returns>
        public float Suma (float num, float num2)
        {
            return num + num2;
        }
        /// <summary>
        /// Resta de numeros decimales
        /// </summary>
        /// <param name="num">Primer operador</param>
        /// <param name="num2">Segundo operador</param>
        /// <returns>Resultado</returns>
        public float Resta(float num, float num2)
        {
            return num - num2;
        }
    }
}

60.Servicios Web.API REST. MVC .Consumiendo Método Delete- Visual Studio 2017

60-.Servicios Web.API REST. MVC- Consumiendo Método Delete

 - En este capítulo del curso de programación en c# con visual studio 2017,vamos a finalizar con  los ejemplos de  servicios web. En esta entrada vamos a consumir desde un cliente el método Delete que implementamos en la entrada anterior.En nuestro caso nos permite eliminar un usuario de nuestra base de datos en el caso que no tenga pedidos asociados.

-  En esta ocasión llamamos al método que nos permite eliminar los datos de un cliente mediante una llamada del tipo http://localhost:57963/API/Usuario.  Además de la ruta de la url a la que hacemos la petición debemos agregar a la petición el tipo de datos que espera nuestro método. Esto lo hacemos facilmente serializando y deserializando los objetos utilizando el formato JSON.

- Os dejo un video con el ejemplo:






- Por si en la entrada anterior no lo chequeastéis os vuelvo a dejar información adicional sobre el formato JSON en este enlace:


- Os dejo también el código del ejemplo visto en el video:

  • Página aspx con los cuatro botones que consultan,insertan,modifican y borran datos:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="APIREST.aspx.cs" Inherits="GestionVarios.APIREST" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <asp:Button ID="btnListaUsuarios" runat="server" Text="Lista pedidos" OnClick="btnListaUsuarios_Click" />
            <asp:Button ID="btnAltaUSuario" runat="server" Text="Nuevo usuario" OnClick="btnAltaUSuario_Click" />
             <asp:Button ID="btnModificarUsuario" runat="server" Text="Modificar usuario" OnClick="btnModificarUsuario_Click" />
            <asp:Button ID="btnBorrarUsuario" runat="server" Text="Borrar Usuario" OnClick="btnBorrarUsuario_Click" />
            <br />
            <asp:Label runat="server" ID="lblResultado"></asp:Label>

        </div>
    </form>
</body>
</html>

  • Código de la parte de servidor desde la que lanzamos todas las peticiones vistas en estas entradas de las API REST:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class APIREST : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnListaUsuarios_Click(object sender, EventArgs e)
        {
            HttpWebResponse res = null;
            StreamReader SReader = null;
            String ResultadoCadena;
            string ruta = "http://localhost:57963/API/PEDIDOS/";
            try
            {
                HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create(ruta);
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.Method = "GET";
                res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;
                SReader = new StreamReader(res.GetResponseStream(), Codificacion);

                ResultadoCadena = SReader.ReadToEnd();
                lblResultado.Text = ResultadoCadena;
            }
            catch (WebException Exc)
            {
                var webResponse = (HttpWebResponse)Exc.Response;
                StreamReader Lector = new StreamReader(webResponse.GetResponseStream());
                string error = Lector.ReadToEnd();

            }
            finally
            {
                if (SReader != null)
                    SReader.Dispose();
                if (res != null)
                    res.Close();
            }
        }

        protected void btnAltaUSuario_Click(object sender, EventArgs e)
        {
                string ResultadoCadena = String.Empty;

            Usuario u = new Usuario();
            u.Nombre = "Bart Simpson";
            u.Email = "BartSimpson@email.com";
            u.CodPais = "ARG";
            u.Pass = cifrar("BART");

            JsonSerializerSettings ConfigJson = new JsonSerializerSettings(); //Evitar que se serialicen los nodos cuyo valor sea nulo (Los ignora).
            ConfigJson.NullValueHandling = NullValueHandling.Ignore;
            byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

            HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.ContentLength = Datos.Length;
                WReq.Method = "POST";
                WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

                HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;

                StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
                ResultadoCadena = SReader.ReadToEnd();

            lblResultado.Text = ResultadoCadena;

               
            }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }

        protected void btnModificarUsuario_Click(object sender, EventArgs e)
        {
            string ResultadoCadena = String.Empty;

            Usuario u = new Usuario();
            u.Nombre = "Bart Simpson 13";
            u.Email = "BartSimpson@email.com";
            u.CodPais = "ARG";
            u.Pass = cifrar("BART13");

            JsonSerializerSettings ConfigJson = new JsonSerializerSettings();
            ConfigJson.NullValueHandling = NullValueHandling.Ignore;
            byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

            HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
            WReq.ContentType = "application/json; charset=UTF-8";
            WReq.ContentLength = Datos.Length;
            WReq.Method = "PUT";
            WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

            HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
            Encoding Codificacion = ASCIIEncoding.UTF8;

            StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
            ResultadoCadena = SReader.ReadToEnd();

            lblResultado.Text = ResultadoCadena;
        }

        protected void btnBorrarUsuario_Click(object sender, EventArgs e)
        {
            string ResultadoCadena = String.Empty;
            try
            {
                Usuario u = new Usuario();
                u.Email = "mail6@mimail.es";


                JsonSerializerSettings ConfigJson = new JsonSerializerSettings(); //Evitar que se serialicen los nodos cuyo valor sea nulo (Los ignora).
                ConfigJson.NullValueHandling = NullValueHandling.Ignore;
                byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

                HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
                WReq.ContentType = "application/json; charset=UTF-8";
                WReq.ContentLength = Datos.Length;
                WReq.Method = "DELETE";
                WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

                HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
                Encoding Codificacion = ASCIIEncoding.UTF8;

                StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
                ResultadoCadena = SReader.ReadToEnd();

                lblResultado.Text = ResultadoCadena;
            }
            catch (Exception ex)
            {
                lblResultado.Text = ex.Message;
            }
        }
    }

 
}

public class Usuario
{
    string nombre = String.Empty;
    string email = String.Empty;
    byte[] pass = null;
    string codPais = String.Empty;

    public string Nombre { get => nombre; set => nombre = value; }
    public string Email { get => email; set => email = value; }
    public byte[] Pass { get => pass; set => pass = value; }
    public string CodPais { get => codPais; set => codPais = value; }
}

59.Servicios Web.API REST. MVC .Método Delete- Visual Studio 2017

59-.Servicios Web.API REST. MVC - Método Delete

- En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver nuestro último método de esta miniserie API REST.  En esta entrada vamos a crearnos un método DELETE. Este método lo utilizaremos para eliminar  usuarios que ya existen en nuestro sistema. La petición a nuestro método nos permitira eliminar usuarios que tengamos registrados en nuestro sistema.

- Para poder realizar esta tarea además de crearnos un método en nuestro controlador que nos permita llamarlos desde un cliente, debemos crear un procedimiento almacenado en nuestra base de datos que valide si existe el usuario en nuestra base de datos y que no tenga pedidos asociados.

- Os dejo el ejemplo en el video:


 - También os dejo el código que hemos visto en nuestro ejemplo:

  • Método delete de nuestro controlador:
    [AcceptVerbs("DELETE")]
    public Resultado BorraUsuario(Usuario u)
        {
        
            Resultado r = new Resultado();

            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                conexion.Open();
                SqlCommand com = conexion.CreateCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.CommandText = "dbo.BorrarUsuario";
                com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = u.Email;
                com.ExecuteNonQuery();
                r.TodoCorrecto = true;
            }
            catch (SqlException ex)
            {
                r.TodoCorrecto = false;
                r.Error = ex.Message;
            }
            catch (Exception ex)
            {
                r.TodoCorrecto = false;
                r.Error = ex.ToString();
            }
            finally
            {
                if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                    conexion.Close();

                conexion.Dispose();
            }

            return r;
        }

  • Objeto usuario:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Pruebas.Models
{
    public class Usuario
    {
        string nombre = String.Empty;
        string email = String.Empty;
        byte[] pass = null;
        string codPais = String.Empty;

        public string Nombre { get => nombre; set => nombre = value; }
        public string Email { get => email; set => email = value; }
        public byte[] Pass { get => pass; set => pass = value; }
        public string CodPais { get => codPais; set => codPais = value; }
    }
}

  • Procedimiento almacenado que se encarga de borrar al usaurio si procede:
ALTER PROCEDURE [dbo].[BorrarUsuario]
    @email varchar(255)
   
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @emailAux varchar(255)
    DECLARE @idAux int

    SELECT  @emailAux=Email,@idAux=IdUsuarios FROM Usuarios WITH(NOLOCK) WHERE email= @email

    IF(@emailAux='')
    BEGIN
        RAISERROR('No existe un usuario con este email',16,1);
        RETURN -1
    END

    IF(    SELECT  count(*) FROM dbo.Pedidos WITH(NOLOCK) WHERE IdUsuario=@idAux) > 0
    BEGIN
        RAISERROR('No podemos eliminar un usuario que tenga pedidos',16,1);
        RETURN -1
    END

    DELETE FROM dbo.Usuarios WHERE email= @email

END

58.Servicios Web.API REST. MVC .Consumiendo Método Put - Visual Studio 2017

58-.Servicios Web.API REST. MVC- Consumiendo Método Put

- En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. En esta entrada vamos a consumir desde un cliente el método put que implementamos en la entrada anterior.En nuestro caso nos permite modificar los datos de algún cliente que tengamos guardado en nuestra base de datos.

-  En esta ocasión llamamos al método que nos permite modificar los datos de un cliente mediante una llamada del tipo http://localhost:57963/API/Usuario.  Además de la ruta de la url a la que hacemos la petición debemos agregar a la petición el tipo de datos que espera nuestro método. Esto lo hacemos facilmente serializando y deserializando los objetos utilizando el formato JSON.

- Os dejo información adicional sobre el formato JSON en este enlace:


- En el video podéis ver un ejemplo sobre como hacer un petición de este tipo a un API/REST:


- Os dejo el código de la petición desde nuestro cliente de pruebas:

  • Código del fichero aspx donde hemos creado el botón que desencadena la petición:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="APIREST.aspx.cs" Inherits="GestionVarios.APIREST" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <asp:Button ID="btnListaUsuarios" runat="server" Text="Lista pedidos" OnClick="btnListaUsuarios_Click" />
            <asp:Button ID="btnAltaUSuario" runat="server" Text="Nuevo usuario" OnClick="btnAltaUSuario_Click" />
             <asp:Button ID="btnModificarUsuario" runat="server" Text="Modificar usuario" OnClick="btnModificarUsuario_Click" />
            <br />
            <asp:Label runat="server" ID="lblResultado"></asp:Label>
        </div>
    </form>
</body>
</html>

  • Código del fichero cs desde dondel lanzamos la petición:
        protected void btnModificarUsuario_Click(object sender, EventArgs e)
        {
            string ResultadoCadena = String.Empty;

            Usuario u = new Usuario();
            u.Nombre = "Bart Simpson 13";
            u.Email = "BartSimpson@email.com";
            u.CodPais = "ARG";
            u.Pass = cifrar("BART13");

            JsonSerializerSettings ConfigJson = new JsonSerializerSettings();
            ConfigJson.NullValueHandling = NullValueHandling.Ignore;
            byte[] Datos = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(u, Formatting.None, ConfigJson));

            HttpWebRequest WReq = (HttpWebRequest)HttpWebRequest.Create("http://localhost:57963/API/Usuario");
            WReq.ContentType = "application/json; charset=UTF-8";
            WReq.ContentLength = Datos.Length;
            WReq.Method = "PUT";
            WReq.GetRequestStream().Write(Datos, 0, Datos.Length);

            HttpWebResponse res = (HttpWebResponse)WReq.GetResponse();
            Encoding Codificacion = ASCIIEncoding.UTF8;

            StreamReader SReader = new StreamReader(res.GetResponseStream(), Codificacion);
            ResultadoCadena = SReader.ReadToEnd();

            lblResultado.Text = ResultadoCadena;
        }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }

  • Clase del objeto que serializamos como parámetro:
public class Usuario
{
    string nombre = String.Empty;
    string email = String.Empty;
    byte[] pass = null;
    string codPais = String.Empty;

    public string Nombre { get => nombre; set => nombre = value; }
    public string Email { get => email; set => email = value; }
    public byte[] Pass { get => pass; set => pass = value; }
    public string CodPais { get => codPais; set => codPais = value; }
}

57.Servicios Web.API REST. MVC .Método Put- Visual Studio 2017

57-.Servicios Web.API REST. MVC - Método Put


  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  con nuestro API REST. Recordando la definición de  API REST, podemos decir que  es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Es una alternativa a otros protocolos estándar de intercambio de datos como SOAP (Simple Object Access Protocol).

- En esta entrada vamos a crearnos un método PUT. Este método lo utilizaremos para modificar datos de usuarios que ya existen en nuestro sistema. La petición a nuestro método nos permitira modificar por ejemplo el nombre de un usuario, mediante una llamada a un procedimiento almacenado que finalmente ejecutara un UPDATE.



  • Como es habitual os dejo el código del ejemplo visto en el video.En primer lugar os dejo el código del nuestro fichero UsuarioController.cs:
    [AcceptVerbs("PUT")]
    public Boolean ModificarUsuario(Usuario u)
    {
        Boolean todoOk = false;

        SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

        try
        {
            conexion.Open();
            SqlCommand com = conexion.CreateCommand();
            com.CommandType = System.Data.CommandType.StoredProcedure;
            com.CommandText = "dbo.ModficarUsuario";
            com.Parameters.Add("@nombre", SqlDbType.VarChar, 255).Value = u.Nombre;
            com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = u.Email;
            com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = u.Pass;
         
            com.ExecuteNonQuery();
            todoOk = true;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.ToString());
        }
        finally
        {
            if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                conexion.Close();

            conexion.Dispose();
        }

        return todoOk;
    }

  • En segundo lugar os dejo el procedimiento almacenado que tenemos en la BBDD:

USE [Empresa]
GO
/****** Object:  StoredProcedure [dbo].[ModficarUsuario]    Script Date: 03/04/2018 18:38:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[ModficarUsuario]
    @nombre varchar(255),
    @pass varbinary(MAX),
    @email varchar(255)
   
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @emailAux varchar(255)
    SELECT  @emailAux=Email FROM Usuarios WITH(NOLOCK) WHERE email= @email

    IF(@emailAux='')
    BEGIN
        RAISERROR('No existe un usuario con este email',16,1);
        RETURN -1
    END

   UPDATE [dbo].[Usuarios] SET Nombre = @nombre, Pass = @pass WHERE email= @email


END

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...