2012-08-22 88 views
10

我剛剛創建asp.net的MVC 4應用程序,並添加默認的WebAPI控制器如何調用WebApi控制器方法?

public class UserApiController : ApiController 
{ 
    // GET api/default1 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/default1/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // POST api/default1 
    public void Post(string value) 
    { 
    } 

    // PUT api/default1/5 
    public void Put(int id, string value) 
    { 
    } 

    // DELETE api/default1/5 
    public void Delete(int id) 
    { 
    } 
} 

然後我試圖通過在瀏覽器中鍵入http://localhost:51416/api/get但得到錯誤調用get()方法:

<Error> 
<Message> 
No HTTP resource was found that matches the request URI 'http://localhost:51416/api/get'. 
</Message> 
<MessageDetail> 
No type was found that matches the controller named 'get'. 
</MessageDetail> 
</Error> 

我的路線配置:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       //defaults: new { controller = "UserApiController", id = RouteParameter.Optional } 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

爲什麼它沒有被默認的工作? 我能做些什麼來解決這個問題?

回答

8

您不需要將get放在URL中,因爲GET是HTTP謂詞的類型。

默認情況下,如果您鍵入URL,瀏覽器將發送GET請求。

因此,與http://localhost:51416/api/

因爲UserApiController是默認的API控制器,如果你取消對該行defaults: new { controller = "UserApiController"...在你的路由配置

請注意,指定你的路線,當你不需要的「控制器」後綴試試吧所以正確dafaults設置爲:defaults: new { controller = "UserApi", id = RouteParameter.Optional }

,或者您需要明確指定控制器http://localhost:51416/api/userapi

您可以在ASP.NET Web API site上開始學習Wep.API和基於HTTP動詞的路由約定。

+0

正在嘗試'http:// localhost:51416/api'正在獲取資源無法找到。但是'http:// localhost:51416/api/userapi' working :)。如何修復'http:// localhost:51416/api'路由? – Kuncevic

+0

爲了使'http:// localhost:51416/api'工作** uncomment **這條線路由:defaults:new {controller =「UserApiController」,id = RouteParameter.Optional}'因爲你指定了default路由器 – nemesv

+0

的控制器與'defaults:new {controller =「UserApiController」,id = RouteParameter.Optional}搭配「,但仍然無法找到資源。當調用'localhost:51416/api /' – Kuncevic