如何在ASP.NET核心api控制台或服务启动中自动调用方法或IActionResult

如何在ASP.NET核心api控制台或服务启动中自动调用方法或IActionResult,api,asp.net-core,Api,Asp.net Core,我想在启动控制台api或服务时调用一个方法 我已经在我的launchsettings中尝试过这段代码,当我使用Visual Studio启动api项目时,它会起作用,并且在启动时会自动调用我的Get方法 但问题是,当我将代码发布为控制台应用程序或发布为Windows服务时,它不起作用,我必须调用urlhttp://localhost:8888从浏览器或邮递员处调用我的方法 "Sadad.Api": { "commandName": "Project", "launchBrowse

我想在启动控制台api或服务时调用一个方法

我已经在我的
launchsettings
中尝试过这段代码,当我使用Visual Studio启动api项目时,它会起作用,并且在启动时会自动调用我的
Get
方法

但问题是,当我将代码发布为控制台应用程序或发布为Windows服务时,它不起作用,我必须调用url
http://localhost:8888
从浏览器或邮递员处调用我的方法

"Sadad.Api": {
    "commandName": "Project",
    "launchBrowser": true,
    "launchUrl": "Home",
    "applicationUrl": "http://localhost:8888",
    "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
    }
}

据我所知,如果您从visual studio调试asp.net核心应用程序,visual studio将帮助我们使用applicationUrl运行浏览器

如果您想在应用程序完全启动后调用其中一个mvc或web api。我建议您可以将IHostApplicationLifetime注入Configure()方法,然后为ApplicationStarted编写回调,该回调将在应用程序主机完全启动时触发

更多详细信息,请参考以下示例:

在Startup.cs ConfigureServices方法中注册httpclient服务

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddHttpClient();

        services.AddControllersWithViews();


    }
在配置方法中添加lifetime.ApplicationStarted.Register回调:

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseStaticFiles();


        app.UseRouting();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {               
            endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Default}/{action=Index}/{id?}");             

        });

        IHttpClientFactory httpClientFactory = app.ApplicationServices.GetService(typeof(IHttpClientFactory)) as IHttpClientFactory;

        lifetime.ApplicationStarted.Register(onApplicationStartedAsync(httpClientFactory).Wait);
    }



    private async Task<Action> onApplicationStartedAsync(IHttpClientFactory httpClientFactory)
    {

        var httpclient = httpClientFactory.CreateClient();

        var httpMessage = new HttpRequestMessage(HttpMethod.Get, "http://localhost:5000/api/values");

        var httpresponse = await httpclient.SendAsync(httpMessage);

        if (httpresponse.IsSuccessStatusCode)
        {
            string res = await httpresponse.Content.ReadAsStringAsync();
        }

        return null;
    }
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、IHostApplicationLifetime生命周期)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(端点=>
{               
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Default}/{action=Index}/{id?}”);
});
IHttpClientFactory httpClientFactory=app.ApplicationServices.GetService(类型为(IHttpClientFactory))作为IHttpClientFactory;
lifetime.ApplicationStarted.Register(在ApplicationStartedAsync(httpClientFactory.Wait)上);
}

私人异步任务

Hi@amirsajjad yousefi,我的回复对您有帮助吗?如果我的回答已经解决了你的问题,请接受它作为答案。关于如何将其标记为答案,您可以参考。这将有助于其他面临同样问题的人。如果没有,请你跟进,让我知道?