現在、HTTP基本認証を使用する必要のあるコントローラアクションを持つWebAPI(.NET Core)を開発しようとしています。これを実装するために、ActionFilterAttributeを作成しました。これをコントローラで使用して、特定のアクションへのアクセスを制限することができます。コントローラでASP.NETコアのActionFilterAttributeからAppSettingsにアクセスする方法
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...
}
}
私は、次のようにそれを使用します:私はこのような何かを行う場合、これはすべてがうまくworkes
SomeController.cs
[BasicAuth("testuser","testpassword")]
[HttpGet("{id}")]
public IActionResult Get(string id) {
return new ObjectResult("Test");
}
ここで、SomeControllerでusernameのパスワードを指定したくありません.cs。代わりにappsettings.jsonに保存したいと思います。 ActionFilterAttributeのOnActionExecutingメソッドのappsettings.jsonに格納されている値にアクセスするにはどうすればよいですか?
BasicAuthAttributeのコンストラクタを次のように変更すると、.NETでは設定を渡すことができますが、これはできません。依存性注入はここでは機能していないようです。
public BasicAuthAttribute(IOptions<AppSettings> appSettings) {}
すべてのヘルプやアイデアは、Setの回答に基づいて
UPDATEいただければ幸いです。
私はフィルターに属性を変更することになりました。 ASP.NET Core documentationで
BasicAuthFilter.cs
public class BasicAuthFilter : IActionFilter{
protected AppSettings _settings { get; set; }
public BasicAuthAttribute(IOptions<AppSettings> appSettings) {
_settings = appSettings;
}
public void OnActionExecuted(ActionExecutedContext context) {
//nothing to do here
}
public override void OnActionExecuting(ActionExecutingContext actionContext) {
//do Auth check...
}
}
SomeController.cs
public class SomeController : Controller {
[TypeFilter(typeof(BasicAuthFilter))]
[HttpGet("{id}")]
public IActionResult Get(string id) {
return new ObjectResult("Test");
}
}