加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 如何在中间件类中访问IHostingEnvironment

发布时间:2020-12-16 03:31:13 所属栏目:asp.Net 来源:网络整理
导读:在Asp.Net Core中,如果创建了一个自定义的中间件并将其放置在自己的类中,那么如何从中间件内部访问IHostingEnvironment? 例如,在我下面的课程中,我认为我可以将IHostingEnvironment注入contstructor,但它始终为null.关于如何访问IHostingEnvironment的任何
在Asp.Net Core中,如果创建了一个自定义的中间件并将其放置在自己的类中,那么如何从中间件内部访问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);

    }
}

解决方法

方法注入工作,只需将其添加到方法签名

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读