在ASP.NET Web API 2

时间:2015-10-30 10:03:29

标签: c# asp.net-web-api2 asp.net-web-api-routing

我刚检查了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}")]将起作用,除非您要覆盖任何操作。

1 个答案:

答案 0 :(得分:1)

我个人不会使用属性路由,而是使用标准路由映射。所以在你的App_Start/RouteConfig.cs文件中:

routes.MapRoute(
    name: "Api",
    url: "api/{action}",
    defaults: new { controller = "Books" }
);