首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在IActionResult核心api控制台或服务启动中自动调用方法或ASP.NET

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

Stack Overflow用户
提问于 2020-06-06 05:39:57
回答 1查看 820关注 0票数 0

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

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

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

代码语言:javascript
复制
"Sadad.Api": {
    "commandName": "Project",
    "launchBrowser": true,
    "launchUrl": "Home",
    "applicationUrl": "http://localhost:8888",
    "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-08 05:56:26

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

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

更多细节,您可以参考下面的示例:

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

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddHttpClient();

        services.AddControllersWithViews();


    }

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

代码语言:javascript
复制
  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;
    }

结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62227834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档