¿Cómo realizar una solicitud Post y serializar una clase a Json en C# .Net y C# .Net Core?

En este video te mostrare como puedes hacer una solicitud por el protocolo Post a un servicio enviando un objeto serializado como Json.

Curso de MVC API .Net C#| Introducción, Hola mundo | #1

En este primer video te muestro como puedes invocar un método básico de MVC Api .Net, y como puedes estructurar tu proyecto para que regrese todos los mensajes en JSON.

Curso MVC .Net: https://www.youtube.com/watch?v=UZNoQMio4XM&list=PLWYKfSbdsjJhzIXJW7FUZUEivr3HGKQZG

Curso de MVC .Net C#, CRUD, Editar y Eliminar con Entity Framework #6

En este sexto video veremos como editar y eliminar registros por medio de Entity Framework.

Primer video del curso: https://www.youtube.com/watch?v=UZNoQMio4XM

Segundo video del curso: https://www.youtube.com/watch?v=XnyJUQqUaRk

Tercer video del curso: https://www.youtube.com/watch?v=7pZn93zHk1A

Cuarto video del curso: https://www.youtube.com/watch?v=HYIcMzRO8k0

Quinto video del curso: https://www.youtube.com/watch?v=znUDIaVDs5E

Descargar código del curso: Clic aquí

¿Cómo ejecutar una URL desde SQL Server? Transact-SQL

Es posible ejecutar una url desde SQL Server, esto es útil si quieres realizar algunas tareas programadas por medio de SQL Agent, tareas que inicien por una Url de tu pagina o sistema.

A continuación te muestro cómo es posible ejecutar una URL desde Sql Server.


-- declaramos una variable cadena y ponemos la url a invocar
Declare @url varchar(max)='https://hdeleon.net/'
-- declaramos una variable entero, para guardar el id del objeto OLE que crearemos
Declare @Object as Int;
-- Una variable cadena para la respuesta
Declare @ResponseText as Varchar(8000);

-- creamos un objeto OLE
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
-- Ejecutamos la url por medio de post
Exec sp_OAMethod @Object, 'open', NULL, 'post',@url,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

-- imprimimos resultado
Select @ResponseText

--eliminamos nuestro id de objeto OLE
Exec sp_OADestroy @Object

Con esto ya puedes ejecutar cualquier URL desde Sql Server.

¿Cómo enviar un objeto json en una solicitud Get o Post en C# .Net?

Ahora que estamos en la era de los webservice todos tenemos la necesidad de saber la forma de enviar datos por medio de Get o Post. En C# la forma de hacer una solicitud a un servicio o a un api es muy sencilla y en el siguiente ejemplo te muestro como hacerlo por medio de una clase que yo hice.

La clase siguiente está preparada para enviar cualquier tipo de objeto ya que recibe el tipo de objeto que se enviara y lo serializa en json.

Recuerda que si el objeto tiene referencias circulares, la siguiente clase no funcionara.

Clase:


public class RequestHdeleon

  //esta clase nos sirve para tener control del resultado regresado por la solicitud
  public class Reply
    {
        public Reply()
        {
            this.success = 0;
            message = "";
        }

        public int success { get; set; }
        public object data { get; set; }
        public String menssage { get; set; }

    }

  public Reply Send<T>(string url,T objectRequest, string method="POST"){

            try {
		Reply oReply= new Reply();                

                JavaScriptSerializer js = new JavaScriptSerializer();

		//serializamos el objeto
                string json = Newtonsoft.Json.JsonConvert.SerializeObject(objectRequest);

                //peticion
                WebRequest request = WebRequest.Create(url_callback);
                //headers
                request.Method = method;
                request.PreAuthenticate = true;
                request.ContentType = "application/json;charset=utf-8'";
                request.Timeout = 10000; //esto es opcional

                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    streamWriter.Write(json);
                    streamWriter.Flush();
                }

                var httpResponse = (HttpWebResponse)request.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }
                oReply.success = 1;
                //y aquí va nuestra respuesta, la cual es lo que nos regrese el sitio solicitado
                oReply.data = result;
            }catch(Exception e){

                oReply.result = 0;
		//en caso de error lo manejamos en el mensaje
                oReply.menssage = e.Message;

            }

            return oReply;
        }
}

Ejemplo de como utilizarla:


public class UnaClase(){
   public string algo{get;set;}
}

//creamos la clase para enviar los parametros
UnaClase oUnObjeto= new UnaClase();
oUnObjeto.algo="pato feliz";

//Creamos el objeto para solicitud
RequestHdeleon oRequest= new RequestHdeleon();

//primer parametro url
//segundo parametro el objeto
//tercer parametro el metodo: POST, GET, PUT, DELETE
RequestHdeleon.Reply oReply=oRequest.Send<UnaClase>("http://somesite.com/api/somecontroller/",oUnObjeto,"POST");

Realizar una petición Post con Php enviando Json como contenido del mensaje.

Para realizar una petición Post enviando contenido Json en php, podemos utilizar la curl_init() la cual nos crea una sesión de tipo cURL con la cual podemos establecer conexión a una url.

Junto con la función curl_init(), debemos utilizar la función curl_setopt() en la cual enviaremos las opciones de nuestra petición y el contenido json. Y también utilizaremos la función curl_exec() que es la que se encarga de mandar el mensaje.

Y para dejar todo esto claro a continuación un código sencillo en el cual voy comentando paso a paso que se está realizando:


                //url de la petición
		$url = 'https://pato.com/login';

		//inicializamos el objeto CUrl
		$ch = curl_init($url);

		//el json simulamos una petición de un login
		$jsonData = array(
			'usuario' => 'pato', //código fijo
			'password' => 'pato123456'
		);

		//creamos el json a partir de nuestro arreglo
		$jsonDataEncoded = json_encode($jsonData);

		//Indicamos que nuestra petición sera Post
		curl_setopt($ch, CURLOPT_POST, 1);

		 //para que la peticion no imprima el resultado como un echo comun, y podamos manipularlo
		 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		//Adjuntamos el json a nuestra petición
		curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

		//Agregamos los encabezados del contenido
		curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

		 //ignorar el certificado, servidor de desarrollo
                  //utilicen estas dos lineas si su petición es tipo https y estan en servidor de desarrollo
		 //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                 //curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE);

		//Ejecutamos la petición
		$result = curl_exec($ch);

Nota: La línea comentada: «curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)» sirve para peticiones a servidores https desde un servidor de desarrollo el cual no tiene modo seguro.

¿Cómo hacer una petición ajax por medio de submit? #jquery #ejemplos

Algunas veces nuestras peticiones de formulario son pesadas (cargar archivos por ejemplo) y esto puede ocasionar que el usuario se estrese o siga presionando botones, para ello yo en estos casos recurro a realizar una petición ajax remplazando el submit del form (a la vez bloqueo la pantalla para que no estén haciendo peticiones a lo bestia, pueden utilizar algo como esto: [bloquear la pantalla con un div]).
Para ello podemos ayudarnos de la función serialize() de jquery, con la cual nos regresa la cadena de parámetros que están en nuestro form (valor1=1&valor2=2&valor3=3…).
Tenemos que tener cuidado en poner el return false al final, ya que con eso evitamos que se continúe con el submit común.
El siguiente ejemplo muestra fácilmente como podemos realizar esa petición (leer los comentarios):

Código HTML

    <form id="miForm" action="/peticion.php">
    	<input name="cajaTexto" type="value" value="pato" />
        <input type="submit" value="Enviar" />
    </form>

Código Jquery

//selector sobre el form seguido de la función submit
$("#miForm").submit(function(){
		//de esta manera remplazamos

		//ahora obtendremos los atributos que necesitaremos
		url=$(this).prop("action")
		//la función serialize nos regresa los input, es importante ponerles name
		parametros=$(this).serialize()

		//aqui utilizamos la petición, en este caso post
		$.post(url,parametros,function(data){
			//aqui es cuando ya se hizo nuestra petición
			//regularmente yo regreso 1 para mostrar exito
				if(data=="1"){
					alert("exito")
				}else{
					//si no regreso el 1, regreso el error y asi lo muestro
					alert(data)
				}
		})

		//ESTO ES MUY IMPORTANTE, YA QUE SI NO SE PONE SE REALIZA LAS DOS PETICIONES
		//TANTO AJAX COMO LA PETICIÓN NORMAL DE FORMULARIO
		//REFRESCANDO TODA LA PAGINA.
		return false;

})

De esta manera podremos remplazar la petición submit normal, y hacer una petición ajax, que es mas formal y elegante.

Nota: el archivo peticion.php del action del form, es un proceso x en el cual se realiza una operación ya sea inserción, validación, etc. Y nos regresa en caso de éxito un «1», sino el error.