2012-11-07 36 views
0

我正在做我的第一步在asp.net mvc試圖開發web api。無法找出路由在asp.net mvc

我有以下路由功能:

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

    routes.MapRoute(
     name: "cdApiDefault", 
     url: "api/{controller}/{action}/{token}/{mid}/{id}", 
     defaults: new { 
      token = UrlParameter.Optional, 
      mid = UrlParameter.Optional, 
      id = RouteParameter.Optional } 
    ); 
} 

及以下控制器:

namespace cdapi.Controllers 
{ 
    public class PostsController : ApiController 
    { 
     // GET api/posts 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "GET_value1", "GET_value2" }; 
     } 

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

     // POST api/posts 
     public void Post([FromBody]string value) 
     { 
     } 

     // PUT api/posts/5 
     public void Put(int id, [FromBody]string value) 
     { 
     } 

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

     public String GetTest(String token, String mid) 
     { 
      return token + " - " + mid; 
     } 
    } 
} 

以下調用

hxxp://本地主機:52628/API /職位/ 5

(在我的瀏覽器中)產生了一些結果,即函數GET被調用並返回一個值。

然而,當我嘗試

hxxp://本地主機:52628/API /職位/ GetTest/MyTestToken/myTestMid

回來與'的資源無法找到'錯誤消息。

我認爲{}行動應包含函數調用,而且「令牌」「MID」應包含的值我指定。我做錯了什麼?

+0

,因爲我不知道這我不寫這個作爲一個答案了是在你的問題或問題的原因拼寫錯誤,但在ASP.NET Web API的情況下,你應該使用'MapHttpRoute'而不是'MapRoute' - 請檢查。 – tpeczek

回答

0

ApiControllers與常規MVC控制器的工作方式不同。這裏,方法名稱(GET,POST,PUT,DELETE)表示HTTP VERBS,而不是url片段。

/api/posts/5 

這調用Get(int)

要做到路由像你想切換到標準的MVC從System.Web.Mvc.Controller而不是System.Web.Http.ApiController繼承和修改你的方法來返回ActionResult