Owin: имя хоста (или ip) и порт

У меня есть классический класс запуска, подобный этому:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
    }
 }

Есть ли способ получить имя хоста (или ip) и порт внутри функции «Конфигурация»?

Спасибо.


person dafriskymonkey    schedule 26.12.2014    source источник
comment
Вы в порядке, просматривая конкретные запросы (например, через app.Run или app.Use), или вам это нужно помимо этого для чего-то, что фактически выполняется в качестве конфигурации? И если первое, вы ищете локальное имя хоста и порт или удаленный?   -  person Matthew Haugen    schedule 26.12.2014
comment
@MatthewHaugen да, мне это нужно вне .Run или .Use :( и мне это нужно, когда оно будет развернуто   -  person dafriskymonkey    schedule 26.12.2014
comment
Хм, да, я не уверен. Но я также не уверен, имеет ли смысл имя хоста. Возможно, вы могли бы получить IP-адрес от сетевой карты, но это при условии, что сервер имеет только один. Кроме того, любой поиск DNS, скорее всего, приведет к чему-то вроде Server01, что не очень полезно.   -  person Matthew Haugen    schedule 26.12.2014
comment
IP-адрес был бы в порядке, я только что обновил сообщение.   -  person dafriskymonkey    schedule 26.12.2014


Ответы (1)


public class Startup
{
    public void Configuration(IAppBuilder app)
    {
         //Get hostname
         string hostName = System.Net.Dns.GetHostName();

        // Get all ip address.
         IPAddress[] ips;
         ips = System.Net.Dns.GetHostAddresses(hostName);
    }
 }

Чтобы получить всю ценность от IAppBuilder, вы можете сделать это следующим образом.

public void Configuration(IAppBuilder appBuilder)
        {
            foreach(var item in appBuilder.Properties)
            {
                //Console.WriteLine(item.Key + " - " + item.Value);
                if(item.Key == "host.Addresses")
                {
                    dynamic d = item.Value;
                    var items = (Dictionary<string,object>)d[0];
                    // Here there are four keys for scheme , host , port , path
                    foreach(var add in items)
                    {
                        Console.WriteLine(add.Key + " - " + add.Value);
                    }
                }
            }
        }
person dotnetstep    schedule 26.12.2014
comment
это улучшение, но как мне получить порт? и это System.Net.Dns :) - person dafriskymonkey; 26.12.2014
comment
Вам нужен порт, на котором запущено приложение? - person dotnetstep; 26.12.2014
comment
в appBuilder.Properties нет ключа host.Addresses :( - person dafriskymonkey; 26.12.2014
comment
Если нет, то вы можете получить порт только при первом запросе. - person dotnetstep; 26.12.2014