2017-02-23 19 views
2

現在、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"); 
    } 
} 

答えて

0

フィルタ]セクションでは説明しています場合には他の誰が、それは以下の実用的なソリューションを参照してください必要がありますDIの使い方:

フィルタにDIからアクセスする必要がある依存関係がある場合、いくつかのサポートされている方法があります。次のいずれかを使用して、クラスやアクションメソッドにフィルターを適用することができます。

あなたの属性に を実装
  • ServiceFilterAttribute
  • TypeFilterAttribute
  • IFilterFactory
関連する問題