简体   繁体   中英

Using ApiControllerAttribute without using RouteAttribute

In ASP.NET Core (v 2.1.5) you can create controllers without having them inherit from Controller class (as you know). And if you do, you have to use RouteAttribute to define your routes. But, I'm interested if we can use implicit routing (and not attribute routing) along with ApiController attribute together. Example: Having this implicit routing in Startup.cs :

app.UseMvc(routeBuilder => 
{
    routeBuilder.MapRoute("api_default", "{controller}/{action}/{id?}");
});

And this Cotroller

[ApiController]
public class ValuesController 
{
    [HttpGet] 
    public string Get(int id) => id.ToString();
}

Will throw this exception:

InvalidOperationException: Action 'TestApi.Controllers.ValuesController.Get' does not have an attribute route. Action methods on controllers annotated with ApiControllerAttribute must be attribute routed.

Is there a way to avoid the exception?

But, I'm interested if we can use implicit routing (and not attribute routing) along with ApiController attribute together.

According to official documentation

Attribute routing becomes a requirement. For example:

 [Route("api/[controller]")] [ApiController] public class ValuesController

Actions are inaccessible via conventional routes defined in UseMvc or by UseMvcWithDefaultRoute in Startup.Configure.

Note: emphasis mine

Reference Build web APIs with ASP.NET Core: Attribute routing requirement

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM