【问题标题】:How to access IHostingEnvironment in middleware class如何在中间件类中访问 IHostingEnvironment
【发布时间】:2016-12-12 19:26:38
【问题描述】:

在 Asp.Net Core 中,如果创建了一个自定义中间件并将其放置在它自己的类中,如何从中间件内部访问IHostingEnvironment

例如,在我下面的课程中,我认为我可以将IHostingEnvironment 注入到构造函数中,但它始终为空。有关如何访问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);

    }
}

【问题讨论】:

  • 我的错,注入构造函数确实有效,我只是忘记将构造函数参数分配给成员 var _env。所以稍后在 Invoke 方法中,_env 为空。手抵着额头!很高兴知道我可以将它注入到 Invoke 方法中。

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0


【解决方案1】:

方法注入有效,只需将其添加到方法签名中

 public async Task Invoke(HttpContext context, IHostingEnvironment env) {...}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多