Criou um básico estruturado para um projeto no .NET com a estrutura da entidade, unidade de trabalho, padrões de repositório e identidade com token de acesso JWT.
Para criar um novo crud para uma entidade que você deve fazer:
Crie em MBB.Abrigo.Core.Models Model Sua entidade
public class Person
{
public string Id { get; set; }
[Required]
[MaxLength(50)]
public string FirstName { get; set; }
}
Crie em MBB.Abrigo.Core.DTO dto sua entidade (o DTO será visto para um cliente)
public class PersonDTO
{
public string Id { get; set; }
public string FirstName { get; set; }
}
Você deve adicionar uma tabela em db, para isso em MBB.Abrigo.Infrastructure na classe BaseContext.cs Insira a próxima linha:
public DbSet<Person> Persons { get; set; }
Crie em MBB.Abrigo.Infrastructure.IRepository Uma interface para o seu repositório; depois disso, você deve criar em MBB.Abrigo.Infrastructure.Repository seu repositório.
Em MBB.Abrigo.Infrastructure na classe UnitOfWork.cs você deve adicionar um repositório (padrão singleton), por exemplo:
public PersonRepository PersonRepository
{
get
{
if (this.personRepository == null)
{
this.personRepository = new PersonRepository(context);
}
return personRepository;
}
}
Crie em MBB.Abrigo.Infrastructure.IManager Uma interface para as operações que seu controlador receberá, depois disso implementar essas operações em MBB.Abrigo.Infrastructure.Manager
Crie em MBB.Abrigo.WebApi.Controller O controlador que receberá as solicitações do cliente, o controlador deve usar o gerente. Por exemplo:
public class PersonController : ApiController
{
private PersonManager personManager = new PersonManager();
// GET: api/Person
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
}
Instale primeiro pelo console PM> Install-Package System.IdentityModel.Tokens.Jwt depois disso Criar.
Adicione MBB.Abrigo.WebApi.Models.AccountViewModels.cs Uma classe para modelo de login, por exemplo:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
Adicione MBB.Abrigo.WebApi.Controllers.AccountController.cs Um controlador para login, por exemplo:
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();
}
}
Adicione MBB.Abrigo.WebApi.Controllers.PersonController.cs A autorização para as solicitações, por exemplo:
// GET: api/Person
[Authorize]
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
Crie uma classe para a geração de token em MBB.Abrigo.WebApi.Security . Veja mais nesse diretório.
Adicionar em MBB.Abrigo.WebApi.App_Start.WebApiConfig.cs A próxima linha 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 }
);
}
}
Adicione MBB.Abrigo.WebApi.WebApi.cs A próxima linha 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 qualquer dúvida ou sugestão, comunique -se com ([email protected])