2015-10-30 48 views
0

我刚刚检查了attribute routing in ASP.NET Web API 2。我可以在类级别使用RoutePrefix属性为所有操作名称URL设置前缀。大多数情况下,我使用动作名称作为特定动作的URL路由。是否有任何方法可以编写一行代码,将所有操作的Route属性的操作名称设置为默认值?我想这是因为我使用动作名称作为URI模板,所以它将在每个动作名称上重复。在ASP.NET Web API中将动作名称自动设置为路由属性2

[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 URL模式。我的应用程序使用单个API控制器,所以我不希望控制器名称作为操作URI的一部分。

解决方案[Route("{action}")]在类级别将工作,如果您从其他所有操作中删除路由属性,除非您想覆盖任何操作。

回答

1

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

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

你的解决方案很好。虽然在课堂上的'[Route(“{action}”)]'正在工作。我不知道为什么它没有提前工作。 – Xyroid

相关问题