在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")]
。