【问题标题】:WebAPI Help page shows different names than controller namesWebAPI 帮助页面显示的名称与控制器名称不同
【发布时间】:2013-10-16 06:46:14
【问题描述】:

我有一个看起来像这样的控制器

    [HttpGet]
    [ActionName("Ping")]
    public bool Ping() { return true; }

    [HttpPost]
    [ActionName("Test")]
    public string Test([FromBody] Testing form) 
    { 
       return form.Email + " " + form.Password; 
    }

在运行帮助页面时会显示:

获取 api/测试
POST api/测试

路由是模板附带的默认路由,所以不确定为什么即使在放置注释“ActionName”之后它也没有选择正确的名称。

任何帮助将不胜感激。

================================================ ==================
回答: 正如 David L. 所建议的,问题在于路由。我阅读了他建议的链接并添加了一个包含“ACTION”的新路由 API,它看起来像这样:

 config.Routes.MapHttpRoute(
       name: "TestApi",
       routeTemplate: "api/{controller}/{action}/{id}",
       defaults: new { id = RouteParameter.Optional }
 );

现在它可以使用正确的注解名称显示正确的 API。

【问题讨论】:

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


    【解决方案1】:

    ActionName 是 System.Web.Mvc 命名空间的一部分。它很可能被 WebAPI 忽略。 WebAPI 将优先考虑您的 Get 和 Post 标签。

    如果你熟悉 ASP.NET MVC,Web API 路由很相似 到 MVC 路由。主要区别在于 Web API 使用 HTTP 方法,而不是 URI 路径,以选择操作。你也可以使用 Web API 中的 MVC 样式路由。本文不假设任何 了解 ASP.NET MVC。

    您可以在以下位置找到有关 WebAPI 路由的更多信息以及上面的引用:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

    编辑:

    为了突出帮助页面试图告诉您的内容,api 是您公开的 api 的根。测试是控制器路由。它将始终尝试在该点使用 REST 动词进行识别,在本例中为 GET 和 POST,这就是它所显示的内容。

    【讨论】:

    • 我使用的是默认路由(意味着我没有更改模板附带的路由)。这就是不工作的原因吗?如果是这样,你知道新的路由应该是什么吗?附:我正在阅读您的链接 - 非常感谢
    • 澄清一下,WebAPI 使用 RESTful 路由,这意味着它通过它们的 REST 属性标识您的方法名称。您应该将 Ping 重命名为 Get 并将 Test 重命名为 Post。这与路由一致,因为它映射到 REST 关键字。
    • 实际上,通过添加一个包含 {action} 的新路由,它现在确实会显示正确的“ActionName”名称。它实际上显示双倍,但我想我只需要进一步阅读 :--) 再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2013-03-24
    • 2014-11-12
    相关资源
    最近更新 更多