I have a .NET Core worker project with TCP pipelines and want to add one HTTP controller endpoint to it. I basically
- created a new worker project (for reproduction purposes)
- in its csproj file I added
<FrameworkReference Include="Microsoft.AspNetCore.App" />
to the item group to gain access to the webbuilder stuff - installed the package Microsoft.AspNetCore.Mvc.Core
- created a
Startup
class
.
internal class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); // not sure if I even need this
services.AddControllers();
}
public void Configure(IApplicationBuilder applicationBuilder)
{
applicationBuilder.UseRouting();
applicationBuilder.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
- configured Kestrel in the
Program
class
.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webHostBuilder =>
{
webHostBuilder.UseKestrel(kestrelServerOptions =>
{
kestrelServerOptions.ListenLocalhost(5000); // this will be a config value
}).UseStartup<Startup>();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
- created a controller for testing purposes
.
[ApiController]
[Route("[controller]")]
internal class UsersController : ControllerBase
{
[HttpGet]
public async Task<ActionResult> Test()
{
return Ok();
}
}
- I run the project and call GET http://localhost:5000/users
- I would expect a 200 but get a 404 and the debugger does not hit the controller endpoint
Does someone know what I'm missing?
You need to specify the default route on method if you want this to be work
And Second thing is make the controller public