【问题标题】:.NET CORE Worker Service won't read controllers.NET CORE Worker Service 不会读取控制器
【发布时间】:2020-12-10 13:26:16
【问题描述】:

我正在尝试在工作服务中创建一个 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!";
    }

}

Startup 没有读取 Controller,所以当我输入 https://localhost:8080/controller/function 时它根本不返回任何内容.. 那么我该如何让它工作呢?

请注意,我尝试添加 Owin 和 SelfHost 依赖项,但它似乎与 .NETCore 不兼容,并且依赖项不断回滚。

【问题讨论】:

  • “我尝试了很多使端点到达控制器但它不会”不是我们可以协助的问题陈述。用具体细节来编辑您的问题,了解您尝试过的方法和无效的方法。
  • @IanKemp 我编辑了声明也许你现在可以理解这个问题了?

标签: c# .net asp.net-core .net-core


【解决方案1】:

问题标题很奇怪? 使用没有路径图等的端点:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

给控制器添加路由属性

[ApiController]
[Route("[controller]/[action]")]
public class HomeController : ControllerBase
{
  

    
    public string Index()
    {
        return "Hello world!";
    }

}

【讨论】:

  • 我发现 Controller 类不是公共的,所以 MapController 没有读取它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2016-02-24
相关资源
最近更新 更多