以下是一个示例,展示如何将用户身份链接到联系人的ASP.Net Core API代码:
首先,在Startup.cs文件中,配置身份验证和授权服务:
public void ConfigureServices(IServiceCollection services)
{
// 添加身份验证服务
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
// 添加授权服务
services.AddAuthorization();
// 添加数据库上下文
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// 添加身份相关服务
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
// 添加MVC服务
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
接下来,创建一个Contact模型类,并在数据库上下文类中添加一个联系人的DbSet:
public class Contact
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string UserId { get; set; }
public ApplicationUser User { get; set; }
}
public class ContactContext : DbContext
{
public ContactContext(DbContextOptions options) : base(options)
{
}
public DbSet Contacts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity()
.HasOne(c => c.User)
.WithMany(u => u.Contacts)
.HasForeignKey(c => c.UserId)
.IsRequired();
}
}
然后,创建一个ContactsController,其中包含用于创建联系人、获取联系人列表和获取单个联系人的API:
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class ContactsController : ControllerBase
{
private readonly ContactContext _context;
private readonly UserManager _userManager;
public ContactsController(ContactContext context, UserManager userManager)
{
_context = context;
_userManager = userManager;
}
// POST: api/Contacts
[HttpPost]
public async Task CreateContact([FromBody] Contact contact)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// 获取当前用户的ID
var userId = _userManager.GetUserId(User);
// 关联联系人和用户
contact.UserId = userId;
_context.Contacts.Add(contact);
await _context.SaveChangesAsync();
return CreatedAtAction("GetContact", new { id = contact.Id }, contact);
}
// GET: api/Contacts
[HttpGet]
public async Task>> GetContacts()
{
// 获取当前用户的ID
var userId = _userManager.GetUserId(User);
// 获取当前用户的所有联系人
var contacts = await _context.Contacts.Where(c => c.UserId == userId).ToListAsync();
return contacts;
}
// GET: api/Contacts/5
[HttpGet("{id}")]
public async Task> GetContact(int id)
{
// 获取当前用户的ID
var userId = _userManager.GetUserId(User);
// 获取指定ID的联系人,并确保它属于当前用户
var contact = await _context.Contacts.FirstOrDefaultAsync(c => c.Id == id && c.UserId == userId);
if (contact == null)
{
return NotFound();
}
return contact;
}
}
以上就是将用户身份链接到联系人的ASP.Net Core API的示例代码。