Asp.net web api ASP.NET5 MVC6路由
我在Startup.cs中定义了以下路径:Asp.net web api ASP.NET5 MVC6路由,asp.net-web-api,routing,asp.net-core,asp.net-core-mvc,Asp.net Web Api,Routing,Asp.net Core,Asp.net Core Mvc,我在Startup.cs中定义了以下路径: app.UseMvc(routes => { routes.MapRoute( name: "api", template: "api/{controller}/{action}/{id?}" ); }); 以及以下控制器: public class BookmarksController : Controller { [HttpGet] public string GetAll()
app.UseMvc(routes =>
{
routes.MapRoute(
name: "api",
template: "api/{controller}/{action}/{id?}"
);
});
以及以下控制器:
public class BookmarksController : Controller
{
[HttpGet]
public string GetAll()
{
return "GetAll Action";
}
[HttpGet("{id}")]
public string Get(int id)
{
return "Get action";
}
}
有人能解释一下为什么我可以通过api/bookmarks/GetAll调用
GetAll
操作,但是不能通过api/bookmarks/GetAll调用Get
吗?这是设计的。如果您有使用属性路由修饰的控制器/操作,则任何与常规路由(在Startup.cs中定义的路由)匹配的请求都无法找到/到达这些控制器/操作。这就是为什么GetAll
可以通过使用传统的路径调用,您应该能够通过像/10
这样的url访问Get(int-id)
(当然,您可能不想修改此模板:-)哦!我想我明白了
要调用Web API的操作方法,无需在URL中包含方法名称
GetAll()
可以通过api/bookmarks/调用,如果api/bookmarks/GetAll
而
Get(int-id)
可以通过api/bookmarks/3而不是api/bookmarks/Get/3来调用。在我的示例中,类和操作都没有使用属性路由进行修饰,api/bookmarks/Get/3与api/{controller}/{action}/{id}路由模板匹配。您使用WebCompatShim了吗?它看起来不像标准行为,因为您没有为控制器指定路由属性。没有它,您的操作必须在没有api/bookmarks/
的情况下可用。