我有一个获取 2 个参数的自定义属性,如何将此参数注入到MyAttribute
?
public class MyAttribute : Attribute
{
private readonly HttpContextAccessor _accessor;
private readonly IUserService _userService;
public MyAttribute(HttpContextAccessor accessor, IUserService userService)
{
_accessor = accessor;
_userService = userService;
// ...
}
}
控制器:
[MyAttribute()]
[Route("/action")]
public IActionResult Action()
{
retuen View();
}
首先,你需要注入IHttpContextAccessor
代替HttpContextAccessor
.
其次,service 不是有效的属性参数类型。我建议您可以使用ActionFilterAttribute
或任何其他Attribute
(这取决于您的详细场景)可以投射到ServiceFilterAttribute
or TypeFilterAttribute
.
这是一个完整的工作演示:
自定义操作过滤器属性:
public class MyAttribute : ActionFilterAttribute
{
private readonly IHttpContextAccessor _accessor;
private readonly IUserService _userService;
public MyAttribute(IHttpContextAccessor accessor, IUserService userService)
{
_accessor = accessor;
_userService = userService;
}
}
控制器:
//[ServiceFilter(typeof(MyAttribute))]
[TypeFilter(typeof(MyAttribute))]
public async Task<IActionResult> Index()
{
return View();
}
注册服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<IUserService, UserService>();
services.AddScoped<MyAttribute>();
}
参考:
从asp.net core中间件中的类和方法属性获取值 https://stackoverflow.com/questions/65659571/get-values-from-class-and-method-attribute-in-middleware-in-asp-net-core
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)