1

我正在做一個Web API 2應用程序,我有一個名爲NCT_ProcessSettings的控制器,並且已經有兩個GET方法,如下所示。如何在Web API2控制器中添加多個GET方法?

1. public IEnumerable<Process_Settings> Get() 
2. public HttpResponseMessage Get(int id) 

現在我想要第三個如下(與第一個一樣,但裏面我會寫不同的邏輯)。

3. public IEnumerable<Process_Settings> Get() //Compiler will confuse which to pick? 

我試了下面。

[HttpGet] 
[Route("GetGlobalSettings")] 
public IEnumerable<NCT_Process_Settings> GetGlobalSettings() 
{ 
    return entityObject.NCT_Process_Settings.Where(c => c.project_id == 0).ToList(); 
} 

下面是我的調用api的角碼。

var url = '/api/NCT_ProcessSettings/GetGlobalSettings'; 

我想知道如何解決這個問題嗎?任何幫助,將不勝感激?

+0

使用屬性路由 - 參見[這個答案](http://stackoverflow.com/questions/9499794/single-controller-with-multiple-get-methods-in-asp-net-web-api) –

+0

謝謝。但我結束了http://stackoverflow.com/users/3559349/stephen-muecke –

+0

你點擊我的名字,而不是鏈接(「這個答案」):) –

回答

4

在基於約定的路由之前,在WebApiConfig.cs中啓用屬性路由。

config.MapHttpAttributeRoutes(); 

下一個更新控制器使用路由屬性。 (注意路由前綴)

[RoutePrefix("api/NCT_ProcessSettings")] 
public class NCT_ProcessSettingsController : ApiController { 

    //GET api/NCT_ProcessSettings 
    [HttpGet] 
    [Route("")] 
    public IEnumerable<Process_Settings> Get() { ... } 

    //GET api/NCT_ProcessSettings/5 
    [HttpGet] 
    [Route("{id:int}")] 
    public HttpResponseMessage Get(int id) { ... } 

    //GET api/NCT_ProcessSettings/GetGlobalSettings 
    [HttpGet] 
    [Route("GetGlobalSettings")] 
    public IEnumerable<NCT_Process_Settings> GetGlobalSettings() { ... } 

} 

閱讀在這裏更多的文檔Attribute Routing in ASP.NET Web API 2

+0

謝謝,所以如果我想調用任何API,那麼localhost:22045/api/NCT_ProcessSettings/GetGlobalSettings這樣對嗎? –

+0

對於那個控制器是的。查看回答中每個動作上方的示例註釋,其中顯示了對該動作的請求會是什麼樣子。您還應該花點時間瀏覽網頁api文檔。 – Nkosi

+0

謝謝你,工作。 –

1

使用操作名稱屬性

 [ActionName("Get")] 
     public IEnumerable<Process_Settings> Get1()//used any name here 
     { 
     } 
相關問題