使用ApiControllerAttribute而不使用RouteAttribute

jav*_*iry 6 c# attributerouting .net-core asp.net-core asp.net-core-webapi

在ASP.NET Core(v 2.1.5)中,您可以创建控制器,而无需从Controller类继承(如您所知).如果你这样做,你必须RouteAttribute用来定义你的路线.但是,如果我们可以将隐式路由(而不是属性路由)与ApiController属性一起使用,我感兴趣.示例:具有此隐式路由Startup.cs:

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

还有这个 Cotroller

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

将抛出此异常:

InvalidOperationException:Action'TestApi.Controllers.ValuesController.Get'没有属性路由.使用ApiControllerAttribute注释的控制器上的操作方法必须是属性路由.

有没有办法避免异常?

Nko*_*osi 17

但是,如果我们可以将隐式路由(而不是属性路由)与ApiController属性一起使用,我感兴趣.

根据官方文件

属性路由成为一项要求.例如:

[Route("api/[controller]")]
[ApiController]
public class ValuesController 
Run Code Online (Sandbox Code Playgroud)

通过UseMvc中定义的常规路由或Startup.Configure中的UseMvcWithDefaultRoute无法访问操作.

注意:强调我的

参考使用ASP.NET Core构建Web API:属性路由要求

  • 但为什么?这个要求似乎完全没有道理。 (11认同)