Hola, buenas tardes, soy programador de muchos años y me gusta mucho cuando encuentro este tipo de vides, rápidos, precisos, mucho oro y poca tierra, gracias por compartir el conocimiento.
Saludos. Muchisimas gracias por el video. Solo escribo para que tomen en cuenta que si usan para el model un ejemplo con una tabla que contiene un foreign key, puede que les desvuelva el mensaje de excepcion: The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'. Si ese es el caso, en el archivo .cs de la clase del modelo, al atributo que es foreign key agreguenle el annotation [JsonIgnore] (este es el o los atributos que son virtual).
Eres la verga we, hoy desperte sin saber hacer un API y gracias a tus videos ya tengo una hecha y funcional.. claro ya traia mis bases de entity y c#. Mil gracias!!
hola cree la api web y me funciono sin problemas, pero me cambio el orden de la clase cuando es en formato XML.. como puedo dejarla tal cual como esta la clase...??
Hola Héctor, antes de nada agradecerte mucho por los excelentes tutoriales, estoy usando VS Community 2019 y cuando creo la partial class para las validaciones sigue insertando valores vacíos pero cuando coloco la notación en la clase generada por entity framework si hace la validación, tiene que ver algo el VS?
hola hector saludos desde Venezuela, una pregunta, la verdad no se mucho de esto y lo que he aprendido es viendo tus videos. por lo menos yo he visto que los webservices trabajan por la red publicando el webservice y los clientes lo consumen. pero si yo quisiera hacer lo mismo con la api como se haría?
como puedo consumir esta api creada desde un proyecto mvc , lo hice con .ajax pero al momento de que le doy clic al boton de alumnos para que me muestre el servicio get desde que hice en mi api me lo manda en alert y quiero cambiarlo aun tex box o algo asi como puedo hacer eso te lo agradeceria bastante
Excelente Héctor! Muy bueno éste y todos los videos que vi de tu canal. Una única discrepancia que tengo, aunque puedo estar equivocado, yo generé este ejemplo desde una tabla ya existente, que no tiene un campo IDENTITY y funciona correctamente. Antes de seguir avanzando, me gustaría saber con que me puedo encontrar, ya que dices que daría error. Gracias. Saludos desde Uruguay
Hola disculpa, a este proyecto como podemos hacer para que nuestra web se vea mejor? ya sea con Angular js bootstrap , etc, podrias ayudarme o algun sitio con el paso a paso para poder realizarlo? muchas gracias
Excelente video, pero tengo un problema yo necesito hacer un api rest pero mas para consultas complejas de la BD, es decir tengo que hacer Querys a la BD uniendo varias tablas y quiero consumirlos via un api rest, el framework solo es para tablas, ¿que recomiendas hacer si tengo esa necesidad de armar mis propias consultas uniendo varias tablas?
Buen video! Pero tengo una duda con lo del MetadataType del minuto 15:34 ... En Postman hago las peticiones Get y si funciona pero al hacer la petición Post no respeta si está nulo el campo name, ni siquiera entra al if (!ModelState.IsValid) { return BadRequest(ModelState); } guarda el registro como NULL.. y puse el Content-type application/json en PostMan Clase de Entity Framework: namespace MVCCrudApi2.Models {
public partial class people { public int id { get; set; } public string name { get; set; } public Nullable age { get; set; }
} } Clase de Validations: using System.ComponentModel.DataAnnotations; namespace MVCCrudApi2.Models { public partial class people { [MetadataType(typeof(people.MetaData))] sealed class MetaData { [Required] public string name; } } } Que es lo que está mal? Saludos y gracias desde ya
amigo he seguido tus videos y muy buenos he aprendido mucho, gracias por ello. Ademas tengo una consulta, se puede hacer una API sin MVC, conexión directa a la BD con metodos directos? espero tu pronta respuesta
@@Bracras844 que estas trabajando en algo que ya esta resuelto, es decir, al final vas a terminar haciendo un mvc .net o algo parecido, reinventar la rueda es un antipatrón
Me devuelve: "HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly." al depurar
Buenos días, Puedes colgar el proyecto otra vez? no funciona salta mucha publicidad basura pero nada del proyecto. Si lo puedes colgar en un repositorio como github, dropbox... te lo agradeceremos todos. Muchas gracias y buen trabajo. Saludos,
Y ahora surgen dos dudas: 1. Cómo implemento esto para consumirlo desde una app WPF? 2. (Y más importante) de que manera se le da seguridad a la API para evitar que alguien usando la herramienta que utilizas pueda manipular mi BD?
13:10 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Web; namespace WebApiMVC.Models { [MetadataType(typeof(Person.PersonMetadata))] public partial class Person { sealed class PersonMetadata { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required, StringLength(50)] public string FirstName { get; set; } [Required, StringLength(50)] public string LastName { get; set; } [Range(0, 150)] public int Age { get; set; } } } } namespace WebApiMVC.Models { using System; using System.Collections.Generic;
public partial class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } } using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace WebApiMVC.Controllers { public class PeopleController : ApiController { public List Get() { using (var entities = new Models.SQLSERVERDEMOEntities()) { return entities.Person.ToList(); } } public Models.Person Get(int id) { using (var entities = new Models.SQLSERVERDEMOEntities()) { return entities.Person.FirstOrDefault(e => e.Id == id); } } public Models.Person Post([FromBody] Models.Person person) { using (var entities = new Models.SQLSERVERDEMOEntities()) { entities.Person.Add(person); entities.SaveChanges(); return person; } } public Models.Person Put(int id, [FromBody] Models.Person person) { using (var entities = new Models.SQLSERVERDEMOEntities()) { var entity = entities.Person.FirstOrDefault(e => e.Id == id); entity.FirstName = person.FirstName; entity.LastName = person.LastName; entity.Age = person.Age; entities.SaveChanges(); return entity; } } public Models.Person Delete(int id) { using (var entities = new Models.SQLSERVERDEMOEntities()) { var entity = entities.Person.FirstOrDefault(e => e.Id == id); entities.Person.Remove(entity); entities.SaveChanges(); return entity; } } } }
Entity Framework en 10 minutos: th-cam.com/video/6nT-RjMEG0o/w-d-xo.html
A trick : you can watch movies at flixzone. I've been using it for watching all kinds of movies during the lockdown.
@Jaden Jasper yup, I have been watching on Flixzone for years myself :D
Hola, buenas tardes, soy programador de muchos años y me gusta mucho cuando encuentro este tipo de vides, rápidos, precisos, mucho oro y poca tierra, gracias por compartir el conocimiento.
Gracias!
Caray, por fin alguien que lo explica una forma mas "colonial" pero entendibile... muchas gracias, me has ayudado bastante
Saludos. Muchisimas gracias por el video. Solo escribo para que tomen en cuenta que si usan para el model un ejemplo con una tabla que contiene un foreign key, puede que les desvuelva el mensaje de excepcion: The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'. Si ese es el caso, en el archivo .cs de la clase del modelo, al atributo que es foreign key agreguenle el annotation [JsonIgnore] (este es el o los atributos que son virtual).
ah! se rifan! gracias
ME sale pero no puedo arreglar el error :/
Eres la verga we, hoy desperte sin saber hacer un API y gracias a tus videos ya tengo una hecha y funcional.. claro ya traia mis bases de entity y c#. Mil gracias!!
muchas gracias por el video hermano
muy buen contenido,fácil de entender y expresarte, me suscribo...gracias por tu esfuerzo...
muy buena explicación, muchas gracias por el vídeo
Buen aporte...
alto crack amigo, sos el rey
""Mi nombre es Héctor de León y, tomen alcohol..." xD
Excelente material, muchas gracias !!!
Buen video, explica muy bien. Saludos y sigue asi
Maestro!
Muy bueno Hector
Excelente muy bien explicado y directo al punto, solo una pregunta tendrás un video agregando token, muchas gracias por compartir Salu2!!!!
hola bro , tengo un problema pongo el host en el Fiddler , me voy a inspectors luego a texview y no me aparece nada del contenido de las tablas
graciias
jaja "andale, manda tu uto mensaje.. buenisimo"
Tienes algún video para consumir esa api ya dentro del sitio ? a manera de vistas?
crack
hola cree la api web y me funciono sin problemas, pero me cambio el orden de la clase cuando es en formato XML..
como puedo dejarla tal cual como esta la clase...??
Disculpa crack, me ha servido bastante pero te consulto ¿tienes algún video donde expliques como consumir la api?
th-cam.com/video/UlqnQO3n2SA/w-d-xo.html
Hola Héctor, antes de nada agradecerte mucho por los excelentes tutoriales, estoy usando VS Community 2019 y cuando creo la partial class para las validaciones sigue insertando valores vacíos pero cuando coloco la notación en la clase generada por entity framework si hace la validación, tiene que ver algo el VS?
Hola estuvo genial con Backend, Tienes uno con MVC con vistas
th-cam.com/video/nlW6cl7BTkY/w-d-xo.html
hola hector saludos desde Venezuela, una pregunta, la verdad no se mucho de esto y lo que he aprendido es viendo tus videos.
por lo menos yo he visto que los webservices trabajan por la red publicando el webservice y los clientes lo consumen. pero si yo quisiera hacer lo mismo con la api como se haría?
como puedo consumir esta api creada desde un proyecto mvc , lo hice con .ajax pero al momento de que le doy clic al boton de alumnos para que me muestre el servicio get desde que hice en mi api me lo manda en alert y quiero cambiarlo aun tex box o algo asi como puedo hacer eso
te lo agradeceria bastante
puedes hacer un tutorial sobre variables de configuracion? de properties.settings.default
😎
Amigo puedes crear el mismo pero integrando net core 3.1? cambiaria mucho a diferencia de net framework?
apenas voy entendiendo esto xd pero como podria consumir esta api a traves de jquery ajax?
Hola Héctor tienes algún video con entityframework con el Black end para insertar registros tomándolos de diferentes tablas?
th-cam.com/video/YKOcp_Y9w4k/w-d-xo.html
se necesita el telerik necesariamente?
Puedes usar postman
Con que conviene mas trabajar MVC Api .net o MCF microsoft comunication fundation?
Apirest mvc. Soap wcf
Muy informativo amigo...
Si uno desea consumir es api como se hace para que la picture se vea en imagen?
depende el cliente que vas a utilizar, si es html con el tag
Pero como se puede convertir el byte[] que se aguarda en la BD a una imagen.. tienes alguna ayuda?
En c# hay funciones en clase file para eso. Aunque lo mejor es regresar la url
Osea que por medio del Path?
Yes
Funciona con cursores o hay debere hacer a manos para que pueda leer las listas??
Como cursores? Dices direcciones de memoria?
@@hdeleonnet si es que lo voy a probar con oracle.
Pero para que quieres direcciones de memoria
Excelente Héctor! Muy bueno éste y todos los videos que vi de tu canal.
Una única discrepancia que tengo, aunque puedo estar equivocado, yo generé este ejemplo desde una tabla ya existente, que no tiene un campo IDENTITY y funciona correctamente. Antes de seguir avanzando, me gustaría saber con que me puedo encontrar, ya que dices que daría error. Gracias. Saludos desde Uruguay
solo tendrías problemas si el primary key tu al insertarlo repitieras el valor, si no es asi no hay de que preocuparse
@@hdeleonnet Perfecto. Entendido. Yo hago los controles para que eso no suceda. Muchas gracias por tu pronta respuesta!
No me aparece mysql server para conectarme
Después de tener las tablas pero no con todos los campos, como agrego un nuevo campo? Me refiero al archivo .edmx, como se modifica?
click derecho al diagrama -> actualizar
@@hdeleonnet Gracias, pero como hago para que no se agreguen todos los campos, por ejemplo la tabla tiene 20 campos y yo solo quiero 10.
por favor publica un CRUD con .NET CORE
Hola disculpa, a este proyecto como podemos hacer para que nuestra web se vea mejor? ya sea con Angular js bootstrap , etc, podrias ayudarme o algun sitio con el paso a paso para poder realizarlo? muchas gracias
Hay miles de templates gratuitps. Busca dependiendo tu tecnologia front
Excelente video, pero tengo un problema yo necesito hacer un api rest pero mas para consultas complejas de la BD, es decir tengo que hacer Querys a la BD uniendo varias tablas y quiero consumirlos via un api rest, el framework solo es para tablas, ¿que recomiendas hacer si tengo esa necesidad de armar mis propias consultas uniendo varias tablas?
th-cam.com/video/kB6995w7bUc/w-d-xo.html
al realizar el test me marca error 500 Internal Server Error
ExceptionMessage": "El tipo 'ObjectContent`1' no pudo serializar el cuerpo de respuesta para el tipo de contenido 'application/json; charset=utf-8'.",
Buen video! Pero tengo una duda con lo del MetadataType del minuto 15:34 ...
En Postman hago las peticiones Get y si funciona pero al hacer la petición Post no respeta si está nulo el campo name, ni siquiera entra al
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
guarda el registro como NULL..
y puse el Content-type application/json en PostMan
Clase de Entity Framework:
namespace MVCCrudApi2.Models
{
public partial class people
{
public int id { get; set; }
public string name { get; set; }
public Nullable age { get; set; }
}
}
Clase de Validations:
using System.ComponentModel.DataAnnotations;
namespace MVCCrudApi2.Models
{
public partial class people
{
[MetadataType(typeof(people.MetaData))]
sealed class MetaData
{
[Required]
public string name;
}
}
}
Que es lo que está mal?
Saludos y gracias desde ya
Pon tu controller
@@hdeleonnet
Completo:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using MVCCrudApi2.Models;
namespace MVCCrudApi2.Controllers
{
public class peopleController : ApiController
{
private MVCDBAPIEntities db = new MVCDBAPIEntities();
// GET: api/people
public IQueryable Getpeople()
{
return db.people;
}
// GET: api/people/5
[ResponseType(typeof(people))]
public IHttpActionResult Getpeople(int id)
{
people people = db.people.Find(id);
if (people == null)
{
return NotFound();
}
return Ok(people);
}
// PUT: api/people/5
[ResponseType(typeof(void))]
public IHttpActionResult Putpeople(int id, people people)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != people.id)
{
return BadRequest();
}
db.Entry(people).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!peopleExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/people
[ResponseType(typeof(people))]
public IHttpActionResult Postpeople(people people)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.people.Add(people);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = people.id }, people);
}
// DELETE: api/people/5
[ResponseType(typeof(people))]
public IHttpActionResult Deletepeople(int id)
{
people people = db.people.Find(id);
if (people == null)
{
return NotFound();
}
db.people.Remove(people);
db.SaveChanges();
return Ok(people);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool peopleExists(int id)
{
return db.people.Count(e => e.id == id) > 0;
}
}
}
hola, que versión de .net framework es?
4.5
no le SampleEntityFramework, cómo lo soluciono?
amigo he seguido tus videos y muy buenos he aprendido mucho, gracias por ello. Ademas tengo una consulta, se puede hacer una API sin MVC, conexión directa a la BD con metodos directos? espero tu pronta respuesta
Si, pero no te lo recomiendo
@@hdeleonnet por que razón no lo recomiendas?
@@Bracras844 reinventas la rueda
@@hdeleonnet pero que es lo que tiene de malo? osea si me puedes decir los contra de eso
@@Bracras844 que estas trabajando en algo que ya esta resuelto, es decir, al final vas a terminar haciendo un mvc .net o algo parecido, reinventar la rueda es un antipatrón
Me devuelve: "HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly." al depurar
Buenos días,
Puedes colgar el proyecto otra vez? no funciona salta mucha publicidad basura pero nada del proyecto.
Si lo puedes colgar en un repositorio como github, dropbox... te lo agradeceremos todos.
Muchas gracias y buen trabajo.
Saludos,
Y ahora surgen dos dudas:
1. Cómo implemento esto para consumirlo desde una app WPF?
2. (Y más importante) de que manera se le da seguridad a la API para evitar que alguien usando la herramienta que utilizas pueda manipular mi BD?
Respuesta de la pregunta 2 ahi se ve access token: Curso MVC Api .Net: th-cam.com/play/PLWYKfSbdsjJg1_t72NSy5hPetthqhacLh.html
Respuesta pregunta 1. Si funciona en consola funciona en wpf th-cam.com/video/qXWrdxf8d4w/w-d-xo.html
Gracias... Excelentes videos....
No soy muy experto en esto, son un noob, pero ¿cómo le hago para hacer esa API remota?, es decir, que yo pueda acceder a ella desde la internet
Ip estatica si es que lo pondras en un Servido tuyo y abrir puerto
@@hdeleonnet algún video que me recomiende?
Es un tema de red. En mi canal hay videos de publicación, buscalo como publicar sitio iis hdeleon
puedes hacer uno desde 0? :c
Curso MVC Api .Net: th-cam.com/play/PLWYKfSbdsjJg1_t72NSy5hPetthqhacLh.html
13:10
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace WebApiMVC.Models
{
[MetadataType(typeof(Person.PersonMetadata))]
public partial class Person
{
sealed class PersonMetadata
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required, StringLength(50)]
public string FirstName { get; set; }
[Required, StringLength(50)]
public string LastName { get; set; }
[Range(0, 150)]
public int Age { get; set; }
}
}
}
namespace WebApiMVC.Models
{
using System;
using System.Collections.Generic;
public partial class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace WebApiMVC.Controllers
{
public class PeopleController : ApiController
{
public List Get()
{
using (var entities = new Models.SQLSERVERDEMOEntities())
{
return entities.Person.ToList();
}
}
public Models.Person Get(int id)
{
using (var entities = new Models.SQLSERVERDEMOEntities())
{
return entities.Person.FirstOrDefault(e => e.Id == id);
}
}
public Models.Person Post([FromBody] Models.Person person)
{
using (var entities = new Models.SQLSERVERDEMOEntities())
{
entities.Person.Add(person);
entities.SaveChanges();
return person;
}
}
public Models.Person Put(int id, [FromBody] Models.Person person)
{
using (var entities = new Models.SQLSERVERDEMOEntities())
{
var entity = entities.Person.FirstOrDefault(e => e.Id == id);
entity.FirstName = person.FirstName;
entity.LastName = person.LastName;
entity.Age = person.Age;
entities.SaveChanges();
return entity;
}
}
public Models.Person Delete(int id)
{
using (var entities = new Models.SQLSERVERDEMOEntities())
{
var entity = entities.Person.FirstOrDefault(e => e.Id == id);
entities.Person.Remove(entity);
entities.SaveChanges();
return entity;
}
}
}
}