我有一个需要选项对象才能启动的中间件。其中一个属性是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();
}
以上确实给了我主机名,但是当请求已在进行中时注册新的中间件为时已晚,因此它并没有真正做到应有的事情。
在中间件注册时,有没有办法在启动时获取主机名?
答案 0 :(得分:1)
在收到第一个请求之前,没有获取主机名的绝对方法。这取决于您在网站上托管的内容。当它自我托管时,您可以app.Properties["host.Addresses"]
。然而,IIS Express是一个不同的故事 - 一开始的关键并不存在(如果有办法,我就不会这样做。)
答案 1 :(得分:0)
使用app.map('pathYouWant', methodYouNeed);
我有一个使用此方法的葡萄牙语示例。
访问here,您可以了解更多有关此的信息。