【发布时间】:2019-12-03 10:40:19
【问题描述】:
我正忙于将现有的工作 WebApi 从 .Net Core 2.2 迁移到 3,但是,路由停止工作。我不断收到 404 Not Found 消息。
想在我的控制器中使用动作名称作为路由模板的一部分,例如:
[Route("/api/[controller]/[action]")]
调用示例:/api/Lookup/GetBranchesAsync
我真的很困惑它为什么停止工作。
请看下面的代码。
启动:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddScoped<IAuthService, AuthService>();
services.AddScoped<ILookupService, LookupService>();
services.AddScoped<IFranchiseRepo, FranchiseRepo>();
services.AddScoped<ILogRepo, LogRepo>();
services.AddSingleton<IConfiguration>(Configuration);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
控制器:
[ApiController]
[Route("/api/[controller]/[action]")]
[Produces("application/json")]
public class LookupController : Controller
{
private readonly ILookupService lookupService;
public LookupController(ILookupService lookupService)
{
this.lookupService = lookupService;
}
[HttpGet]
public async Task<IActionResult> GetBranchesAsync()
{
}
[HttpGet("{branchID}")]
public async Task<IActionResult> GetBranchSEAsync(int? branchID)
{
}
}
对可能出现的问题有什么建议吗?
【问题讨论】:
-
可能是TLS使用的加密方式。您可能正在从 32 位加密转换为 64 位加密模式。要建立 HTTPS(安全连接)和 TLS 连接,必须建立。我看到很多升级问题。加密模式必须与证书匹配,如果您有 32 位证书,则不能使用 64 位加密模式。我认为 Net 库有错误,从 Core 2.2 到 3.0 可能是从 32 位到 64 位。请参阅:en.wikipedia.org/wiki/Transport_Layer_Security
-
去掉路由模板中的前导
/ -
@jdweng 我目前正在本地测试,不使用任何证书或 https 连接。
-
您确定您的服务器使用的是 https。可以使用诸如wireshark或fiddler之类的嗅探器进行检查。我会将原始核心中第一个请求中的标头与升级机器进行比较。失败与默认标头有关。您没有使用 HTTPS 可能是正确的,但是在 Net Library 的核心 3.0 上设置了不同的默认标头。然后,您必须在代码中添加一个缺失的标头,以使新标头看起来像旧标头。还要使用嗅探器检查 http 版本(1.0:流,1.1 块)。还要检查 IP 是 V4 还是 V6。
标签: c# asp.net-core-webapi asp.net-core-3.0