C# 当用户向服务器发送请求时,查找当前控制器名称和操作名称
我为authorize user创建了一个属性。对于授权用户,使用时需要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)
控制器
名称和操作
名称向他们发送请求
例如:
这是我的行动:
[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"];
}
}