我刚检查了attribute routing in ASP.NET Web API 2。我可以在类级别使用RoutePrefix
属性为所有操作名称URL设置前缀。大多数情况下,我使用操作名称作为特定操作的URL路由。我有没有办法编写一行代码,将动作名称设置为所有动作的Route
属性的默认值?我想要这样,因为我使用动作名称作为URI模板,因此它将在每个动作名称的顶部重复。
[RoutePrefix("api")]
//[Route("{action}")] // Possible I could write like this
public class BooksController : ApiController
{
[Route("GetBooks")] //Route value same as action name, http://localhost:xxxx/api/GetBooks
public object GetBooks() { ... }
[Route("CreateBook")] //Route value same as action name, http://localhost:xxxx/api/CreateBook
[HttpPost]
public object CreateBook(Book book) { ... }
}
编辑1 :我想使用属性路由,因为我想要像此http://hostname/api/action_name
这样的网址API网址模式。我的应用程序使用单个API控制器,因此我不希望控制器名称作为操作URI的一部分。
解决方案:如果您从所有其他操作中删除路由属性,则类级别上的[Route("{action}")]
将起作用,除非您要覆盖任何操作。
答案 0 :(得分:1)
我个人不会使用属性路由,而是使用标准路由映射。所以在你的App_Start/RouteConfig.cs
文件中:
routes.MapRoute(
name: "Api",
url: "api/{action}",
defaults: new { controller = "Books" }
);