Я пытаюсь создать хост API внутри рабочей службы, поэтому в CreateDefaultBuilder я попытался добавить WebBuilder, например следующий код.
Host.CreateDefaultBuilder(args)
.UseSerilog()
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
IConfiguration config = hostContext.Configuration;
Configuration Configurations = config.GetSection("ConnectionStrings").Get<Configuration>();
services.AddSingleton(Configurations);
services.AddSingleton<IDataAccess, DataAccess>();
services.AddHostedService<ATMListener>();
services.AddHostedService<DBListener>();
services.AddControllers();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseIISIntegration()
.UseUrls("https://*:44378");
})
.ConfigureWebHost(config =>
{
config.UseUrls("https://*:8080");
});
и в классе запуска я использую следующий код
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
//endpoints.MapControllers();
endpoints.MapControllerRoute(
name: "Home",
pattern: "{controller}/{action}/{id?}",
defaults: new { Controller = "Home", action = "Index"}
) ;
Log.Warning("Created Controller");
});
}
Конечная точка работает нормально, и я протестировал ее с помощью enpoint.MapGet("/"... ), и она сработала и вернула значения... Однако я создал контроллер под названием HomeController: ControllerBase
//[Route("[controller]")]
//[ApiController]
[Controller]
[ApiController]
public class HomeController : ControllerBase
{
//[HttpGet]
//[Route("Test")]
public string Index()
{
return "Hello world!";
}
}
Запуск не читает контроллер, поэтому, когда я набираю https://localhost:8080/controller/function, он вообще ничего не возвращает. Итак, как мне заставить его работать?
Обратите внимание, что я пытался добавить зависимости Owin и SelfHost, но они несовместимы с .NETCore, и зависимость продолжает откатываться.
@IanKemp Я отредактировал заявление, может быть, теперь вы понимаете проблему?





Название вопроса очень странное? Используйте конечные точки без карт путей и т. д.:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
добавить атрибут маршрута в контроллер
[ApiController]
[Route("[controller]/[action]")]
public class HomeController : ControllerBase
{
public string Index()
{
return "Hello world!";
}
}
Я обнаружил, что класс Controller не был общедоступным, поэтому MapController не читал его.
«Я много раз пытался заставить конечную точку достичь контроллера, но это не так» — это не формулировка проблемы, с которой мы можем помочь. Отредактируйте свой вопрос, указав конкретные сведения о том, что вы пытались и не сработали.