Problem:
I'm creating an API Application with NET Core 3.1.
I'd like to avoid to set route attribute over every ApiControllers
and Actions. I tryed a lot of combinations over UseEndpoints
to set a conventional route, but i'm failing.
With some configuration I can't get the Api working, with some others I get this exception during startup:
InvalidOperationException: Action 'ApiIsWorking' does not have an attribute route. Action methods on controllers annotated with ApiControllerAttribute must be attribute routed.
How can i set the startup.cs
to auto map controllers with their class name and actions with their method name?
Thank you!
Some code:
startup.cs
...
services.AddControllers()
...
app.UseHttpsRedirection()
.UseRouting()
.UseAuthentication()
.UseEndpoints(endpoints => ?? )
.UseCoreHttpContext()
.UseServerConfiguration();
controller.cs
[ApiController]
public class BaseAPI : ControllerBase
{
[HttpGet]
public string ApiIsWorking()
{
return "API is working!";
}
}
Solution:
As Reza Aghaei says in the solution, the error was to add the ApiController attribute. After I removed it, the command UseEndpoints start to work.
My mistake was to add the attribute to be able to recognize which classes should be exposed via API. It wasn't necessary because UseEndpoints maps only the classes that inherit from ControllerBase.
Warning:
1) Conventional Routing require [FromBody]
attribute in actions params.
2) I highlight Zinov's response about conventional routing problems with Swashbuckle in .NET Core
[ApiController]
attribute from controller and setup route inUseEndpoints
. – Uncloak