如何在ASP.NET核心api控制台或服务启动中自动调用方法或IActionResult
我想在启动控制台api或服务时调用一个方法 我已经在我的如何在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
launchsettings
中尝试过这段代码,当我使用Visual Studio启动api项目时,它会起作用,并且在启动时会自动调用我的Get
方法
但问题是,当我将代码发布为控制台应用程序或发布为Windows服务时,它不起作用,我必须调用urlhttp://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,我的回复对您有帮助吗?如果我的回答已经解决了你的问题,请接受它作为答案。关于如何将其标记为答案,您可以参考。这将有助于其他面临同样问题的人。如果没有,请你跟进,让我知道?