2013-04-24 17 views
1

如何設置路由以支持此操作?如何獲得MVC4 Web API以支持同一控制器中的HTTP動詞和「動作」方法?

  • GET/API /值/ 工作
  • GET/API /值/ 1 工作
  • POST/API 工作工作
  • PUT/API /值/值
  • DELETE/api /值作品
  • GET/api/values/GetSomeStuff/1 不行!

如果我切換路線,然後GetSomeStuff工作,但然後/ API /值不起作用。我如何配置路線以使它們都起作用?

實例方法:

// GET api/values 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

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

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

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

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

    // GET api/values/5 
    [HttpGet] 
    public string GetSomeStuff(int id) 
    { 
     return "stuff"; 
    } 

路線都設置這樣的:如何

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

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

我用單獨的控制器(http://mangoit.wordpress.com/2012/12/ 11/rest-and-rpc-in-asp-net-web-api /) – 2013-04-24 15:31:51

回答

0

你可以嘗試以下途徑:

 config.Routes.MapHttpRoute(
      name: "DefaultController", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { id = @"^[0-9]*$" } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultController2", 
      routeTemplate: "api/{controller}/{action}/{id2}" 
     ); 

,改變你的操作方法:

[HttpGet] 
    public string GetSomeStuff(int id2) 
    { 
     return "stuff"; 
    } 
+0

是的,我們確實通過路線限制解決了這個問題,例如您在答案中提到的內容。謝謝。 – Shane 2013-04-25 20:36:17

0

約來代替:

GET /api/values/GetSomeStuff/1 

你設計你的URL這樣的:

GET /api/someStuff/1 

現在您可以簡單地使用SomeStuffControllerGet(int id)操作。

+2

是唯一的方法是爲每個這些單獨的控制器?每個控制器是否應該只有5種方法才能成爲真正的RESTful? – Shane 2013-04-24 14:29:21

+0

面對類似的問題......這是正確的,一個控制器只有5個方法? – BlueChippy 2013-11-14 07:28:42

相關問題