Как определить, какой метод используется, используя мой настраиваемый атрибут в ASP. NET Core - PullRequest
0 голосов
/ 17 июня 2020

Привет, ребята, я нахожу решение, как я могу получить метод спецификаций 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";
    }
}

теперь, как мне получить метод, использующий этот настраиваемый атрибут?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...