在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必须经过属性路由。
是否有避免异常的方法?
答案 0 :(得分:12)
但是,我很想知道我们是否可以将隐式路由(而不是属性路由)与
ApiController
属性一起使用。
根据官方文档
属性路由成为必需。例如:
[Route("api/[controller]")] [ApiController] public class ValuesController
操作无法通过UseMvc或 通过UseMvcWithDefaultRoute在Startup.Configure中。
注意: 强调我的
引用Build web APIs with ASP.NET Core: Attribute routing requirement