【问题标题】:Set action name as route attribute automatically in ASP.NET Web API 2在 ASP.NET Web API 2 中自动将操作名称设置为路由属性
【发布时间】:2015-10-30 10:03:28
【问题描述】:

我刚刚检查了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 这样的 Web API URL 模式。我的应用程序使用单个 API 控制器,因此我不希望控制器名称作为操作 URI 的一部分。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 您的解决方案很好。尽管班级级别的[Route("{action}")] 正在工作。我不知道为什么它没有早点工作。
    猜你喜欢
    • 2015-11-10
    • 2015-03-19
    • 2013-09-10
    • 2013-07-10
    • 2017-12-23
    • 2016-07-13
    • 2017-03-24
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多