2013-10-15 107 views
0

我有一個控制器,它看起來像這樣的WebAPI幫助頁面顯示出比控制器名稱

[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和它看起來像這樣:

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

有了這一點,使用正確標註名稱NOW的顯示正確的API。

回答

1

ActionName是System.Web.Mvc命名空間的一部分。它很可能被WebAPI忽略。 WebAPI將首先優先考慮您的獲取和發佈標籤。

如果您熟悉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,這就是它顯示的內容。

+0

我使用默認路由(意思是我沒有更改模板附帶的路由)。這是不工作的原因嗎?如果是這樣,你知道新的路由應該是什麼嗎?附:我正在閱讀您的鏈接 - 非常感謝 –

+0

爲了澄清,WebAPI使用RESTful路由,這意味着它通過其REST屬性標識您的方法名稱。您應該重新命名Ping以獲取並測試以發佈。這與路由一致,因爲它映射到REST關鍵字。 –

+0

實際上,通過添加一個具有{action}作爲其一部分的新Route,它現在確實顯示了正確的「ActionName」名稱。它實際上顯示雙倍,但我想我只需要進一步閱讀: - )再次感謝。 –

相關問題