2014-09-30 68 views
0

我已經使用C#.net中的實體框架工作創建了Web API。我有一個控制器類,我已經定義了這樣的一些方法。如何覆蓋C#中的Web API中的Get方法.net

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using Test_Net_Test_Info.Models; 

namespace Test_Net_Test_Info.Controllers 
{ 
public class InfosController : ApiController 
{ 
    public List<Info> Get() 
    { 
     return InfoRepository.GetAllInfos(); 
    } 
    public Info Get(int id) 
    { 
     return InfoyRepository.GetInfoById(id); 
    } 
    public Info Get(string company) 
    { 
     return InfoRepository.GetInfoByCompany(company); 
    } 
    public Info Get(string contact) 
    { 
     return InfoRepository.GetInfoByContact(contact); 
    } 

我InfoRepository類看起來像這樣

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 

    namespace Test_Net_Test_Info.Models 
    { 
     public class InfoRepository 
     { 
     public static List<Info> GetAllInfoss() 
     { 
     Test_NETEntities dataContext = new Test_NETEntities(); 
     var query = from info in dataContext.Infoss select info; 
     return query.ToList(); 
     } 
     public static Info GetInfoById(int id) 
     { 
     test_NETEntities dataContext = new test_NETEntities(); 
     v*emphasized text*ar query = (from info in dataContext.Infos where info.ID ==id select info).SingleOrDefault(); 
     return query; 
     } 
    public static Info GetInfoByContact(string contact) 
    { 
     Test_NETEntities dataContext = new Test_NETEntities(); 
    // var query = (from info in dataContext.Infos where info.Contact == contact select info).SingleOrDefault(); 
    // return query; 
    //} 
    public static Info GetInfoByCompany(string company) 
    { 
     Test_NETEntities dataContext = new test_NETEntities(); 
     var query = (from info in dataContext.Infos where info.Company == company select info).SingleOrDefault(); 
     return query; 
    } 

我得到一個錯誤Test_Net_Test_Info.Controllers。已經使用相同的參數類型定義了一個名爲'Get'的成員。我正嘗試按公司名稱和聯繫人姓名檢索數據。請幫助我。

回答

3

您的方法簽名不明確。更改名稱將解決這個問題:

public Info GetByCompany(string company) 
{ 
    return InfoRepository.GetInfoByCompany(company); 
} 

public Info GetByContact(string contact) 
{ 
    return InfoRepository.GetInfoByContact(contact); 
} 

在這兩種方法調用,編譯器看到的唯一事情是這樣的(簽名):

Info GetByContact(string) 

它不知道該如何選擇companycontact參數。

+0

感謝reply.where盡在倉庫類或控制器類這些變化。 – user2897967 2014-09-30 13:14:01

+0

在控制器類中,通過外部代碼訪問該控制器類。 – 2014-09-30 13:14:45

+0

我做到了,現在它已經成功構建,但我如何在瀏覽器上測試這些方法。 – user2897967 2014-09-30 13:27:12

1

這是HTTP動詞和C#方法簽名不總是相處的一個領域。一種方法可能是將它們組合成一個單一的方法:

public Info Get(string company = null, string contact = null) 
{ 
    if (company != null) 
     return InfoRepository.GetInfoByCompany(company); 
    if (contact != null) 
     return InfoRepository.GetInfoByContact(contact); 
    // throw an exception? some other default action? 
} 

然後你只是憑着模型綁定來填充基於請求的方法參數。

(您也可以使用支票上string.IsNullOrWhiteSpace()而不是null。)

+0

感謝您的回覆,但如果兩者都不爲空,或者我希望在前端搜索按鈕單擊事件時調用Get方法。 – user2897967 2014-09-30 13:11:19

+0

@ user2897967:如果兩者都不爲空,則默認爲某個操作。 (基本上,首先將更常見/可能的條件放在第一位。)廣告/記錄的API不允許這樣做,因此從客戶角度來看,行爲無論如何都是不確定的。至於從前端代碼調用它,這並沒有任何改變。但是,您正在向API發送GET請求,現在*仍然可以使用。 – David 2014-09-30 13:14:46

+0

我有更多的搜索方法,如基於城市,州,所以想要爲每個搜索條件單獨調用或按鈕。通過使用上面的邏輯,用戶必須在傳遞參數時放置空或空格? – user2897967 2014-09-30 13:52:27