Привет, ребята, я нахожу решение, как я могу получить метод спецификаций c, который использует мой настраиваемый атрибут, а также я использую generi c, чтобы получить спецификацию c класс
это мой абстрактный класс, унаследованный от моего контроллера:
public abstract class BaseController<T> : ControllerBase
{
protected string Role
{
get
{
return GetCustomerRole(typeof(T));
}
set { }
}
private string GetCustomerRole(Type t)
{
string role = string.Empty;
var pfRole = Attribute.GetCustomAttribute(t, typeof(PFRole)) as PFRole;
if (pfRole != null)
{
role = pfRole.Role;
}
MemberInfo[] MyMemberInfo = t.GetMethods();
for (int i = 0; i < MyMemberInfo.Length; i++)
{
pfRole= Attribute.GetCustomAttribute(MyMemberInfo[i], typeof(PFRole)) as PFRole;
if (pfRole != null)
{
role = pfRole.Role;
}
}
return role;
}
, а это мой контроллер:
[PFRole(Role="Admin")]
public class CryptoController: BaseController<CryptoController>
{
// some contructor and DI Services
[PFRole(Role="Customer")]
[HttpGet]
[Route("price/list")]
public async Task<ActionResult> GetPriceList()
{
try
{
if (_Principal != null)
{
if (VerifyTokenRole)
{
return Ok(await _cryptoCompareService.GetPrices());
}
return BadRequest(new { success = false, msg = "Oops, you are not authorize to access this page" });
}
return BadRequest(new { success = false, msg = "Invalid Token" });
}
catch(Exception e)
{
_logger.LogError(e.Message);
_logger.LogTrace(e.StackTrace);
}
return BadRequest(new { success = false, msg = "Unknown Error occured. Please try again." });
}
[PFRole(Role="admin")]
[HttpGet]
[Route("last-price")]
public async Task<ActionResult> GetCoinLastPrice()
{
try
{
if (_Principal != null)
{
if (VerifyTokenRole)
{
return Ok(await _cryptoCompareService.GetCoinLastPrice());
}
return BadRequest(new { success = false, msg = "Oops, you are not authorize to access this page" });
}
return BadRequest(new { success = false, msg = "Invalid Token" });
}
catch (Exception e)
{
_logger.LogError(e.Message);
_logger.LogTrace(e.StackTrace);
}
return BadRequest(new { success = false, msg = "Unknown Error occured. Please try again." });
}
это мой настраиваемый атрибут:
public class PFRole: Attribute
{
// customer by default
public string Role;
public PFRole()
{
Role = "Customer";
}
}
теперь, как мне получить метод, использующий этот настраиваемый атрибут?