Создал базовую структурированную для проекта в .NET с фреймворком объекта, единицей работ, паттерном репозитория и идентичностью с токеном доступа JWT.
Чтобы создать новый CRUD для сущности, которую вы должны сделать:
Создать в MBB.Abrigo.Core.Models моделировать свою сущность
public class Person
{
public string Id { get; set; }
[Required]
[MaxLength(50)]
public string FirstName { get; set; }
}
Создать в MBB.Abrigo.Core.DTO DTO ВАШЕГО ОБОРУДА (DTO будет замечен для клиента)
public class PersonDTO
{
public string Id { get; set; }
public string FirstName { get; set; }
}
Вы должны добавить таблицу в DB, для этого в MBB.Abrigo.Infrastructure в классе BaseContext.cs Вставьте следующую строку:
public DbSet<Person> Persons { get; set; }
Создать в MBB.Abrigo.Infrastructure.IRepository интерфейс для вашего репозитория, после этого вы должны создать в MBB.Abrigo.Infrastructure.Repository Ваш репозиторий.
В MBB.Abrigo.Infrastructure в классе UnitOfWork.cs вы должны добавить репозиторий (Singleton Pattern), например:
public PersonRepository PersonRepository
{
get
{
if (this.personRepository == null)
{
this.personRepository = new PersonRepository(context);
}
return personRepository;
}
}
Создать в MBB.Abrigo.Infrastructure.IManager интерфейс для операций, которые будет получать ваш контроллер, после этого реализации этой операции в MBB.Abrigo.Infrastructure.Manager
Создать в MBB.Abrigo.WebApi.Controller Контроллер, который будет получать запросы клиента, контроллер должен использовать диспетчер. Например:
public class PersonController : ApiController
{
private PersonManager personManager = new PersonManager();
// GET: api/Person
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
}
Сначала установите консольную PM> Install-Package System.IdentityModel.Tokens.Jwt после этого создания.
Добавить в MBB.Abrigo.WebApi.Models.AccountViewModels.cs класс для модели для входа в систему, например:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
Добавить в MBB.Abrigo.WebApi.Controllers.AccountController.cs контроллер для входа в систему, например:
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();
}
}
Добавьте в MBB.Abrigo.WebApi.Controllers.PersonController.cs Авторизация для запросов, например:
// GET: api/Person
[Authorize]
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
Создайте класс для генерации токенов в MBB.Abrigo.WebApi.Security . Смотрите больше в этом каталоге.
Добавить в MBB.Abrigo.WebApi.App_Start.WebApiConfig.cs Следующая строка кода:
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 }
);
}
}
Добавить в MBB.Abrigo.WebApi.WebApi.cs Следующая строка кода:
<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>
По любым вопросам или предложениям общайтесь с ([email protected])