在不使用RouteAttribute的情况下使用ApiControllerAttribute

时间:2018-10-28 23:52:17

标签: c# asp.net-core asp.net-core-webapi attributerouting

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

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

还有这个Cotroller

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

将抛出此异常:

  

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

是否有避免异常的方法?

1 个答案:

答案 0 :(得分:12)

  

但是,我很想知道我们是否可以将隐式路由(而不是属性路由)与ApiController属性一起使用。

根据官方文档

  

属性路由成为必需。例如:

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

操作无法通过UseMvc或   通过UseMvcWithDefaultRoute在Startup.Configure中。

注意: 强调我的

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