WebAPI帮助页面显示的名称与控制器名称不同

时间:2013-10-15 21:53:08

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

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

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

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

并且在运行“帮助”页面时显示:

  

GET api /测试
  POST api / Test

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

任何帮助都将得到真正的赞赏。

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

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

有了它,它会使用正确的注释名称显示正确的API。

1 个答案:

答案 0 :(得分: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,它就是它所显示的内容。