Membuat dasar terstruktur untuk proyek di .NET dengan kerangka kerja entitas, unit kerja, derai repositori dan identitas dengan token akses JWT.
Untuk membuat crud baru untuk entitas yang harus Anda lakukan:
Buat di MBB.Abrigo.Core.Models Model entitas Anda
public class Person
{
public string Id { get; set; }
[Required]
[MaxLength(50)]
public string FirstName { get; set; }
}
Buat di MBB.Abrigo.Core.DTO DTO Entitas Anda (DTO akan terlihat untuk klien)
public class PersonDTO
{
public string Id { get; set; }
public string FirstName { get; set; }
}
Anda harus menambahkan tabel di DB, untuk ini di MBB.Abrigo.Infrastructure di kelas BaseContext.cs Sisipkan baris berikutnya:
public DbSet<Person> Persons { get; set; }
Buat di MBB.Abrigo.Infrastructure.IRepository Antarmuka untuk repositori Anda, setelah ini Anda harus membuat di MBB.Abrigo.Infrastructure.Repository repositori Anda.
Dalam MBB.Abrigo.Infrastructure di kelas UnitOfWork.cs Anda harus menambahkan repositori (pola singleton) misalnya:
public PersonRepository PersonRepository
{
get
{
if (this.personRepository == null)
{
this.personRepository = new PersonRepository(context);
}
return personRepository;
}
}
Buat di MBB.Abrigo.Infrastructure.IManager Antarmuka untuk operasi yang akan diterima pengontrol Anda, setelah itu mengimplementasikan operasi ini di MBB.Abrigo.Infrastructure.Manager
Buat di MBB.Abrigo.WebApi.Controller Pengontrol yang akan menerima permintaan klien, pengontrol harus memanfaatkan manajer. Misalnya:
public class PersonController : ApiController
{
private PersonManager personManager = new PersonManager();
// GET: api/Person
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
}
Instal pertama oleh konsol PM> Install-Package System.IdentityModel.Tokens.Jwt Setelah itu buat.
Tambahkan MBB.Abrigo.WebApi.Models.AccountViewModels.cs Kelas untuk model login, misalnya:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
Tambahkan MBB.Abrigo.WebApi.Controllers.AccountController.cs Pengontrol untuk login, misalnya:
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();
}
}
Tambahkan MBB.Abrigo.WebApi.Controllers.PersonController.cs otorisasi untuk permintaan, misalnya:
// GET: api/Person
[Authorize]
public IEnumerable<PersonDTO> GetPersons()
{
return personManager.GetAll();
}
Buat kelas untuk generasi token di MBB.Abrigo.WebApi.Security . Lihat lebih banyak di direktori itu.
Tambahkan MBB.Abrigo.WebApi.App_Start.WebApiConfig.cs Baris kode berikutnya:
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 }
);
}
}
Tambahkan MBB.Abrigo.WebApi.WebApi.cs Baris kode berikutnya:
<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>
Untuk pertanyaan atau saran, berkomunikasi dengan ([email protected])