首页 > 解决方案 > 用户向服务器发送请求时查找当前控制器名称和操作名称

问题描述

我为授权用户创建一个属性。对于授权用户,我在使用向他们发送请求时需要Controller姓名和姓名。Action

例如 :

这是我的行动:

    [HttpPost]
    [Pemission("Add News Role")]
    public async Task<ReturnResult> AddRole(RoleDto model, CancellationToken token)
    {
        if (ModelState.IsValid)
        {
            var result = await mediator.Send(new CreateRoleCommand { RoleName = model.Name }, token);

            if (result.Success)
            {
                return Ok();
            }
            return BadRequest(result.ErrorMessage);
        }
        return BadRequest();
    }

我需要在这个属性中编写授权代码Pemission

[AttributeUsage(AttributeTargets.All)]
public sealed class PemissionAttribute : Attribute
{
    private readonly string _name;

    public PemissionAttribute(string name)
    {
        _name = name;

    }
    public string Name => _name;


    public async Task FindControllerName()
    {

    }
}

现在我需要在这个 Attribute中找到Controller并命名。Action

我怎么能找到他们???

标签: c#asp.netasp.net-core

解决方案


更改为也从IAuthorizationFilter继承,并且在 OnAuthorization 方法中,您可以检索您正在查找的路由数据的信息。

using Microsoft.AspNetCore.Mvc.Filters;
using System;

public sealed class PemissionAttribute : Attribute, IAuthorizationFilter
{
    private readonly string _name;

    public PemissionAttribute(string name)
    {
        _name = name;
    }

    public string Name => _name;

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var action = context.RouteData.Values["action"];
        var controller = context.RouteData.Values["controller"];
    }
}

推荐阅读