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

时间:2015-10-08 23:21:03

标签: c# owin startup pipeline

我有一个需要选项对象才能启动的中间件。其中一个属性是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();
        }

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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