使用ApiControllerAttribute而不使用RouteAttribute



在ASP.NET Core(2.1.5版(中,您可以创建控制器,而无需让它们继承Controller类(如您所知(。如果你这样做了,你必须使用RouteAttribute来定义你的路线。但是,我很感兴趣的是,我们是否可以同时使用隐式路由(而不是属性路由(和ApiController属性。示例:在Startup.cs:中具有此隐式路由

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

这个Controller

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

将抛出此异常:

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

有办法避免异常吗?

但是,如果我们可以同时使用隐式路由(而不是属性路由(和ApiController属性,我很感兴趣。

根据官方文件

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

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

通过UseMvc或通过在Startup.Configure中使用MvcWithDefaultRoute。

注意:emphasis mine

参考使用ASP.NET核心构建web API:属性路由要求

也要在控制器名称中硬使用[Route("api/VillaAPI")]

最新更新