32

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 Controller class

[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?

4
  • It is referring to the [Http*] attributes Commented Oct 28, 2018 at 23:54
  • @Nkosi I did use [HttpGet]. Please see the update. The error is still there. Commented Oct 28, 2018 at 23:56
  • Any reason not wanting to inherit from Api/Controller? I mean, you still have to use a lot of ASP.NET Core classes anyway Commented Oct 28, 2018 at 23:58
  • 1
    according to docs learn.microsoft.com/en-us/aspnet/core/web-api/… Attribute routing becomes a requirement when using [ApiController] Commented Oct 29, 2018 at 0:02

2 Answers 2

45

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

Sign up to request clarification or add additional context in comments.

1 Comment

But why? There seems to be absolutely no justification for this requirement.
0

Also use the [Route("api/VillaAPI")] in Controller Name hard.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.