Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当用户向服务器发送请求时,查找当前控制器名称和操作名称_C#_Asp.net_Asp.net Core - Fatal编程技术网

C# 当用户向服务器发送请求时,查找当前控制器名称和操作名称

C# 当用户向服务器发送请求时,查找当前控制器名称和操作名称,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我为authorize user创建了一个属性。对于授权用户,使用时需要控制器名称和操作名称向他们发送请求 例如: 这是我的行动: [HttpPost] [Pemission("Add News Role")] public async Task<ReturnResult> AddRole(RoleDto model, CancellationToken token) { if (ModelState.IsValid)

我为authorize user创建了一个属性。对于授权用户,使用时需要
控制器
名称和
操作
名称向他们发送请求

例如:

这是我的行动:

    [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();
    }
现在我需要在这个属性中找到
Controller
Action
名称


如何找到它们?

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

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"];
    }
}

现在我需要在构造函数中使用它,并且我必须在授权中传递它。我如何解决这个问题?@Kianoush你能注射它吗?根据@Darkonekt发布的问题。。。如果在构造函数中需要它,可以将其注入。下面是一个可能有效的实现:
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"];
    }
}