在Owin启动时注册中间件时是否可以获取主机名(sitename)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

我有一个需要选项对象才能启动的中间件。其中一个属性是hostname。(我的意思是它的设置类似于http://mywebsite.com而不是物理机器名称)。中间件配置为在启动时执行一些业务逻辑,因此app.Run()和app.Use()不是一个选项。

我也不能硬编码主机名(因为我运行具有不同站点名称的多个实例),或者从配置文件中获取它,因为:1。如果我知道主机名2,我可以从数据库中获取信息的重复信息,因为我还不能确定调用了多个网站实例中的哪一个

var options = new MyMiddlewareOptions{
hostname = <hostname of the server hosting this app>,
.
..
...
//other properties
};
app.UseMyMiddleware(options);

如何在Owin Startup时获取主机名,因为没有可用的请求或环境数据?

我尝试过使用内联中间件,但我得到了主机名,但到时候为时已晚。

app.Use((ctx,next) =>
        {
            host = ctx.Request.Uri.Host;
            var options = new MyMiddlewareOptions
            {
                hostname = host
            };
            app.UseMyMiddleware(options);
            return next.Invoke();
        }

上面的确给了我主机名,但是当一个请求已经在进行中时,注册一个新的中间件已经太晚了,因此它并没有真正做到它应该做的事情。

在中间件注册时,有没有办法在启动时获取主机名?

提问于
用户回答回答于

在收到第一个请求之前,没有获取主机名的绝对方法。这取决于您托管该网站的内容。当它是自托管时,你可以做到app.Properties["host.Addresses"]。然而,IIS Express是一个不同的故事 - 开始的关键不存在(如果有办法,我不会这样做)。

用户回答回答于

使用app.map('pathYouWant', methodYouNeed); 我在葡萄牙语中使用此方法的示例。 访问此处,您可以了解更多相关信息。

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问5 回答
  • 无聊至极

    4 粉丝504 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答
  • 御姐万岁

    6 粉丝507 提问3 回答

扫码关注云+社区

领取腾讯云代金券