エンティティフレームワーク、作業単位、リポジトリパターン、およびJWTアクセストークンを使用したアイデンティティを備えた.NETのプロジェクトの基本構造を作成しました。
エンティティのために新しい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 Your Entityで作成します(DTOはクライアントのために見られます)
public class PersonDTO
{
public string Id { get; set; }
public string FirstName { get; set; }
}
これについては、 MBB.Abrigo.InfrastructureにBaseContext.csで次の行を挿入します。
public DbSet<Person> Persons { get; set; }
MBB.Abrigo.Infrastructure.IRepositoryで作成するリポジトリのインターフェイスを作成します。この後、 MBB.Abrigo.Infrastructure.Repositoryでリポジトリを作成する必要があります。
MBB.Abrigo.Infrastructure in class 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])とコミュニケーションを取ります