Creó un básico estructurado en un proyecto en .NET con el marco de la entidad, la unidad de trabajo, el patrón de repositorio e identidad con el token de acceso JWT.
Para crear un nuevo crud para una entidad que debe hacer:
Crear en MBB.Abrigo.Core.Models modelo su entidad
public class Person
{
public string Id { get; set; }
[Required]
[MaxLength(50)]
public string FirstName { get; set; }
}
Crear en MBB.Abrigo.Core.DTO dto su entidad (DTO se verá para un cliente)
public class PersonDTO
{
public string Id { get; set; }
public string FirstName { get; set; }
}
Debe agregar una tabla en DB, para esto en MBB.Abrigo.Infrastructure en la clase BaseContext.cs inserte la siguiente línea:
public DbSet<Person> Persons { get; set; }
Cree en MBB.Abrigo.Infrastructure.IRepository una interfaz para su repositorio, después de esto, debe crear en MBB.Abrigo.Infrastructure.Repository su repositorio.
En MBB.Abrigo.Infrastructure en clase UnitOfWork.cs debe agregar un repositorio (patrón singleton) por ejemplo:
public PersonRepository PersonRepository
{
get
{
if (this.personRepository == null)
{
this.personRepository = new PersonRepository(context);
}
return personRepository;
}
}
Cree en MBB.Abrigo.Infrastructure.IManager una interfaz para las operaciones que recibirá su controlador, después de eso, implementa estas operaciones en MBB.Abrigo.Infrastructure.Manager
Cree en MBB.Abrigo.WebApi.Controller El controlador que recibirá las solicitudes del cliente, el controlador debe hacer uso del administrador. Por ejemplo:
public class PersonController : ApiController
{
private PersonManager personManager = new PersonManager();
// GET: api/Person
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
}
Primer instalación por consola PM> Install-Package System.IdentityModel.Tokens.Jwt Después de eso.
Agregue en MBB.Abrigo.WebApi.Models.AccountViewModels.cs una clase para el modelo de inicio de sesión, por ejemplo:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
Agregue en MBB.Abrigo.WebApi.Controllers.AccountController.cs un controlador para el inicio de sesión, por ejemplo:
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = await UserManager.FindByEmailAsync(model.Username);
if (user != null)
{
if (UserManager.CheckPassword(user, model.Password))
{
var token = TokenGenerator.GenerateTokenJwt(model.Username);
return Ok(token);
}
else
{
return Unauthorized();
}
}
else
{
return Unauthorized();
}
}
Agregue en MBB.Abrigo.WebApi.Controllers.PersonController.cs la autorización para las solicitudes, por ejemplo:
// GET: api/Person
[Authorize]
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
Cree una clase para la generación de tokens en MBB.Abrigo.WebApi.Security . Ver más en ese directorio.
Agregue en MBB.Abrigo.WebApi.App_Start.WebApiConfig.cs la siguiente línea de código:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Configuración de rutas y servicios de API
config.MapHttpAttributeRoutes();
config.MessageHandlers.Add(new TokenValidationHandler()); //THIS LINE TO ADD
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Agregue en MBB.Abrigo.WebApi.WebApi.cs la siguiente línea de código:
<appSettings>
<add key="JWT_SECRET_KEY" value="clave-secreta-api"/>
<add key="JWT_AUDIENCE_TOKEN" value="http://localhost:49220"/>
<add key="JWT_ISSUER_TOKEN" value="http://localhost:49220"/>
<add key="JWT_EXPIRE_MINUTES" value="30"/>
</appSettings>
Para cualquier pregunta o sugerencia, comuníquese con ([email protected])