我目前正在尝试开发WebAPI(.NET Core),该WebAPI具有一些应使用HTTP基本身份验证的控制器操作。为了实现这一点,我编写了一个ActionFilterAttribute,然后可以在控制器中使用它来限制对某些操作的访问。如果我做这样的事情,这一切都很好:
BasicAuthAttribute.cs
public class BasicAuthAttribute : ActionFilterAttribute{
private string _username { get; set; }
private string _password { get; set; }
public BasicAuthAttribute(string username, string password) {
_username = username;
_password = password;
}
public override void OnActionExecuting(ActionExecutingContext actionContext) {
//do Auth check...
}
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中按以下方式使用它:
SomeController.cs
[BasicAuth("testuser","testpassword")]
[HttpGet("{id}")]
public IActionResult Get(string id) {
return new ObjectResult("Test");
}
Run Code Online (Sandbox Code Playgroud)
现在,我不想在SomeController.cs中指定用户名和密码。相反,我想将它们存储在appsettings.json中。如何通过ActionFilterAttribute的OnActionExecuting方法访问存储在appsettings.json中的值?
如果将BasicAuthAttribute的构造函数更改为以下内容,.Net希望我通过设置,这是不可能的。依赖注入似乎在这里不起作用。
public BasicAuthAttribute(IOptions<AppSettings> appSettings) {}
Run Code Online (Sandbox Code Playgroud)
任何帮助或想法将不胜感激
根据Set的答案进行更新:
我最终将属性更改为过滤器。如果其他人需要它,请参见下面的工作解决方案:
BasicAuthFilter.cs
public class BasicAuthFilter : IActionFilter{
protected AppSettings _settings { get; set; …Run Code Online (Sandbox Code Playgroud)