2014-09-30 4 views
0

Я создал веб-api, используя работу Entity Frame в C# .net. У меня есть класс контроллера, в котором я определил некоторые методы, подобные этому.Как переопределить метод Get в веб-API в C# .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) 

Он не знает, как выбрать между параметр company и contact.

+0

Спасибо за reply.where, чтобы сделать эти изменения в классе хранилище или в классе контроллера. – user2897967

+0

В классе контроллера к нему обращается внешний код. –

+0

Я сделал это теперь, когда он был успешно построен, но как я могу проверить этот метод в браузере. – user2897967

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 на кнопке click для кнопки поиска на лицевой стороне. – user2897967

+0

@ user2897967: Если оба значения не равны нулю, то по умолчанию используется какое-либо действие. (Вначале просто укажите наиболее распространенное/вероятное условие.) Рекламируемый/документированный API не позволит этого, поэтому поведение с точки зрения клиента в любом случае не определено. Что касается вызова этого из внешнего кода, это никак не изменилось. Однако вы делаете запросы GET в API * сейчас *, все равно будет работать. – David

+0

У меня есть больше методов поиска, например, на основе City, State, поэтому вы хотите иметь отдельный вызов или кнопку для каждого критерия поиска. Используя вышеприведенную логику, пользователь должен помещать нуль или пробел при передаче параметра? – user2897967