首页 > 解决方案 > 如何在 cli 应用程序上调用控制器

问题描述

我有一个控制台应用程序NET Core 2.2),这个应用程序的主要功能是在 cli 中。但是我想在它上面调用一个rest api端点(以获取有关此应用程序的一些信息)。现在我在 Program.cs 中实现代码,添加一个 Startup.cs 和一个控制器。但我无法通过 Postman 联系到我的控制器。什么不见​​了?

程序.cs:

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
    // further logick...
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseUrls("http://0.0.0.0:5002");

启动.cs:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddBusinessComponents();
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }
}

控制器:

[Produces("application/json")]
[Route("cli/v1/dataPicker/info")]
public class InfoController : Controller
{
    private IInfoBusinessComponent BusinessComponent { get; }

    [Microsoft.AspNetCore.Mvc.HttpGet]
    public async Task<IActionResult> GetInfoAsync()
    {
        Statuses statuses = null;
        try
        {
            statuses = await BusinessComponent.GetInfo();
        }
        catch (System.Exception ex)
        {
            return BadRequest($"Exception occurred while trying to get health informations.");
        }

        return Ok(statuses);
    }
}

这是我的邮递员回复: 邮递员的屏幕截图

标签: c#asp.net-coreasp.net-web-api.net-corecommand-line-interface

解决方案


尝试:

[Route("api/[controller]")]
[ApiController]
public class InfoController : Controller
{ 
    [HttpGet("GetInfo")]
    public async Task<IActionResult> GetInfoAsync()
    {
        Statuses statuses = null;
        try
        {
            statuses = await BusinessComponent.GetInfo();
        }
        catch (System.Exception ex)
        {
            return BadRequest($"Exception occurred while trying to get health informations.");
        }

        return Ok(statuses);
    }
}

并在浏览器中调用它,如:

http://localhost:5002/api/Info/GetInfo

推荐阅读