在 ASP.NET Web API 2 中自动将操作名称设置为路由属性
Set action name as route attribute automatically in ASP.NET Web API 2
我刚检查过 attribute routing in ASP.NET Web API 2。因为我可以在 class 级别使用 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:我想使用属性路由,因为我想要这样的网络 API URL 模式 http://hostname/api/action_name
。我的应用程序使用单个 API 控制器,因此我不想将控制器名称作为操作 URI 的一部分。
解决方案:如果您从所有其他操作中删除路由属性,则 class 级别的 [Route("{action}")]
将起作用,除非您想覆盖任何操作。
就我个人而言,我不会使用属性路由,而是使用标准路由映射。所以在你的 App_Start/RouteConfig.cs
文件中:
routes.MapRoute(
name: "Api",
url: "api/{action}",
defaults: new { controller = "Books" }
);
我刚检查过 attribute routing in ASP.NET Web API 2。因为我可以在 class 级别使用 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:我想使用属性路由,因为我想要这样的网络 API URL 模式 http://hostname/api/action_name
。我的应用程序使用单个 API 控制器,因此我不想将控制器名称作为操作 URI 的一部分。
解决方案:如果您从所有其他操作中删除路由属性,则 class 级别的 [Route("{action}")]
将起作用,除非您想覆盖任何操作。
就我个人而言,我不会使用属性路由,而是使用标准路由映射。所以在你的 App_Start/RouteConfig.cs
文件中:
routes.MapRoute(
name: "Api",
url: "api/{action}",
defaults: new { controller = "Books" }
);