.Net Core 3 Web 中的动作路由 API
Action routing in .Net Core 3 Web API
我正忙于将现有的工作 WebApi 从 .Net Core 2.2 迁移到 3,但是,路由停止工作。我不断收到 404 Not Found 消息。
想在我的控制器中使用动作名称作为路由模板的一部分,例如:
[Route("/api/[controller]/[action]")]
Call example: /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)
{
}
}
对可能出现的问题有什么建议吗?
根据 https://github.com/aspnet/AspNetCore/issues/8998,在 .NET Core 3.0 中,Async
在 Action 名称中默认被跳过。您的端点在 /api/Lookup/GetBranches
可用。您可以通过替换
来更改此行为
services.AddControllers();
和
services.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false);
在ConfigureServices
方法中,或者只使用新路由
我正忙于将现有的工作 WebApi 从 .Net Core 2.2 迁移到 3,但是,路由停止工作。我不断收到 404 Not Found 消息。
想在我的控制器中使用动作名称作为路由模板的一部分,例如:
[Route("/api/[controller]/[action]")]
Call example: /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)
{
}
}
对可能出现的问题有什么建议吗?
根据 https://github.com/aspnet/AspNetCore/issues/8998,在 .NET Core 3.0 中,Async
在 Action 名称中默认被跳过。您的端点在 /api/Lookup/GetBranches
可用。您可以通过替换
services.AddControllers();
和
services.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false);
在ConfigureServices
方法中,或者只使用新路由