2016-12-12 2 views
3

ミドルウェアのカスタム部分が作成され、それ自身のクラスに配置されている場合、Asp.Net Coreではミドルウェア内部からIHostingEnvironmentにアクセスするにはどうすればよいですか?ミドルウェアクラスのIHostingEnvironmentへのアクセス方法

例えば以下のクラスでは、IHostingEnvironmentをcontstructorに注入できると思っていましたが、常にnullです。 IHostingEnvironmentにアクセスする方法に関する他のアイデアはありますか?

public class ForceHttps { 
    private readonly RequestDelegate _next; 
    private readonly IHostingEnvironment _env; 

    /// <summary> 
    /// This approach to getting access to IHostingEnvironment 
    /// doesn't work. It's always null 
    /// </summary> 
    /// <param name="next"></param> 
    /// <param name="env"></param> 
    public ForceHttps(RequestDelegate next, IHostingEnvironment env) { 
     _next = next; 
    } 


    public async Task Invoke(HttpContext context) { 
     string sslPort = ""; 
     HttpRequest request = context.Request; 


     if(_env.IsDevelopment()) { 
      sslPort = ":44376"; 
     } 

     if(request.IsHttps == false) { 
      context.Response.Redirect("https://" + request.Host + sslPort + request.Path); 
     } 

     await _next.Invoke(context); 

    } 
} 
+1

私の悪いに追加します。後でInvokeメソッドの_envはnullです。額に手を差し伸べる!私はそれをInvokeメソッドに注入できることを知ることは素晴らしいことです。 –

答えて

6

方法注入の作品は、ちょうど仕事、私はメンバーのvar _ENVにコンストラクタのパラメータをアサインするのを忘れないコンストラクタに注入し、メソッドのシグネチャ

public async Task Invoke(HttpContext context, IHostingEnvironment env) {...} 
関連する問題