2012-11-14 56 views
5

我正在使用新的.NET Web API設置一個休息服務,並且遇到了一個小問題。我們希望有一個不同的路由,但我不知道如何實現這一點。.NET Web API中的多個URL級別

public class FormController : ApiController 
{ 

    // api/form 
    public string Get() 
    { 
     return "OK-Get"; 
    } 
    // api/form/method1 
    public string Method1() 
    { 
     return "OK1"; 
    } 
    // api/form/method2 
    public string Method2() 
    { 
     return "OK2"; 
    } 
} 

但這不起作用。如果我去/api/form/method2,我會得到OK-Get作爲迴應。

我在想這與路由有關,但我不確定,因爲我之前沒有使用過MVC。我在WebApiConfig.cs試圖將其設置是這樣的:

config.Routes.MapHttpRoute(
    name: "FormApi", 
    routeTemplate: "api/form/{action}" 
); 

但是什麼也沒做。

回答

3

路由幾乎是正確的,但主要問題是您在其他操作方法中缺少所需的HttpMethod屬性。由於其名稱,第一種方法推斷爲[HttpGet]。這是你所需要的:

public class FormController : ApiController 
{ 
    // api/form 
    public string Get() 
    { 
     return "OK-Get"; 
    } 

    // api/form/method1 
    [HttpGet] 
    public string Method1() 
    { 
     return "OK1"; 
    } 

    // api/form/method2 
    [HttpGet] 
    public string Method2() 
    { 
     return "OK2"; 
    } 
} 

路由映射屬於在App_Start/RouteConfig.cs

routes.MapHttpRoute(
    name: "FormApi", 
    routeTemplate: "api/form/{action}", 
    defaults: new { controller = "form", action = "Get"} 
); 

欲瞭解更多信息,請閱讀http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection

+0

這工作!謝謝。請注意,路由配置需要位於WebApiConfig.cs中才能生效。 – peirix