0

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

    [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.所建议的那样,问题出在路由上。我阅读了他建议的链接并添加了一个新的路由 API,其中包含“ACTION”,它看起来像这样:

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

有了这个,它现在可以使用正确的 Annotation 名称显示正确的 API。

4

1 回答 1

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,这就是它所显示的。

于 2013-10-15T21:55:40.153 回答