【发布时间】:2019-10-16 00:26:52
【问题描述】:
我正在尝试使用 API 路由参数(将在多个 API 中使用)能够传递给验证属性。
这是属性
[AttributeUsage(AttributeTargets.All)]
public class AuthorizeSheetOwnerAttribute : Attribute
{
private readonly ApplicationDbContext context;
private readonly IHttpContextAccessor httpContextAccessor;
public int characterSheetId { get; set; }
public AuthorizeSheetOwnerAttribute(int characterSheetId, ApplicationDbContext context, IHttpContextAccessor httpContextAccessor)
{
this.characterSheetId = characterSheetId;
this.context = context;
this.httpContextAccessor = httpContextAccessor;
}
public async Task<bool> IsOwnerAsync()
{
var userId = httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
if (context.CharacterSheetModel.FirstOrDefault(c => c.UserId == userId && c.Id == characterSheetId) == null) return false;
return true;
}
}
这就是暗示
[Route("api/{characterSheetId}/[controller]")]
[ApiController]
[AuthorizeSheetOwner(characterSheetId = "{characterSheetId}")]
public class WorldController : ControllerBase
{
属性应该采用从路由传入的 characterSheetId 来填充属性属性,但我不确定我该怎么做...我承认在属性处理方面有点天真
【问题讨论】:
标签: c# asp.net-core routing attributes