【发布时间】:2021-01-17 03:30:35
【问题描述】:
我有一个带有 TCP 管道的 .NET Core 辅助项目,并希望向它添加一个 HTTP 控制器端点。我基本上
- 创建了一个新的工人项目(用于复制目的)
- 在其 csproj 文件中,我将
<FrameworkReference Include="Microsoft.AspNetCore.App" />添加到项目组以访问 webbuilder 的内容 - 安装包Microsoft.AspNetCore.Mvc.Core
- 创建了一个
Startup类
.
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(); });
}
}
- 在
Program类中配置 Kestrel
.
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>();
});
}
- 为测试目的创建了一个控制器
.
[ApiController]
[Route("[controller]")]
internal class UsersController : ControllerBase
{
[HttpGet]
public async Task<ActionResult> Test()
{
return Ok();
}
}
- 我运行项目并调用 GET http://localhost:5000/users
- 我希望得到 200 但得到 404 并且调试器没有命中控制器端点
有人知道我错过了什么吗?
【问题讨论】:
-
尝试 HTTP 和 HTTPS。 S 是安全模式,使用 TLS 进行身份验证。如果 TLS 错误,通常您会收到 500 错误。未找到错误 404,但如果服务器忽略 HTTP 并需要 HTTPS,则可以解释 404 错误。 HTTP 默认为端口 80 或 8080。
-
您能否将控制器访问修饰符更改为公共并检查?它能解决你的问题吗?
-
@SergeyNazarov 哦,该死的,将其更改为公共已修复 :)
-
@OlafSvenson 这是将 HTTP 端点添加到工作项目的正确方法吗?