Получить имя домена или хоста и порт в Configure of Startup.cs - PullRequest
1 голос
/ 27 марта 2019

Мне нужна помощь в получении имени хоста / домена и порта моего приложения.

Итак, вот мой пример кода в моем методе Configure внутри Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var url = ""; // something that will get the current host/domain and port of the running applicaiton.

    RecurringJob.AddOrUpdate<ISomething>(i=>i.SomethingToExecute(url), Cron.Daily);
}

Поскольку мне нужно передать строку url в мой SomethingToExecute метод

public class Something : ISomething 
{
    public void SomethingToExecute(string url){
        ... 
        Debug.WriteLine(url)
    }
}

Ответы [ 3 ]

4 голосов
/ 27 марта 2019

В соответствии с этим Github Issue и ответом команды ASP.NET Core:

Это невозможно. Вам необходимо прочитать эту информацию непосредственно из конфигурации. Сервер не считывает конфигурацию конечной точки, пока не будет готов запустить приложение (после запуска). Даже тогда эта информация будет неточной в большинстве случаев из-за обратных настроек прокси, таких как IIS, Nginx, Docker и т. Д.

1 голос
/ 01 апреля 2019

Это кажется невозможным, но в качестве альтернативы, если вы хотите вызвать HTTP-запрос или веб-API с использованием кода C #, вы можете использовать HttpClient()

Что вы можете сделать, это объединить сказанное @TanvirArjel и использовать HttpClient() для вызова HTTP-запроса.

  1. Сохраните ваше имя хоста в appsettings.json
  2. В вашем SomethingToExecute() используйте что-то вроде этого.

    private readonly IConfiguration configuration;
    public ISomething(IConfiguration configuration){
        this.configuration = configuration;
    }
    
    public void SomethingToExecute(){
        var httpClient = new HttpClient();
    
        var yourHostNameAndPort = configuration["NameFromYourAppSEttingsJsonFile"];
    
        httpClient.Get("" + yourHostNameAndPort + "...);
    }
    

Надеюсь, это поможет кому-то еще.

1 голос
/ 27 марта 2019

Как уже упоминал TanvirArjel, это кажется невозможным.Но в вашем случае вы можете динамически получить имя хоста в теле кода.

(протестировано в .Net Core 2.1)

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    services.AddSingleton<something>();
}

что-то.cs

public class something
{
    public string url;

    public string SomethingToExecute()
    {
        return url;
    }

}

Контроллер

[ApiController]
public class HomeController : ControllerBase
{

    private something _sth;

    public HomeController(something sth)
    {
        _sth = sth;
    }

    [HttpGet("foo")]
    public string foo()
    {

        _sth.url = Request.Scheme + "://" + Request.Host;
        return _sth.SomethingToExecute();

    }

}
...