我有一个看起来像这样的控制器
[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。
答案 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,它就是它所显示的内容。