如何在C#.net中覆盖Web API中的Get方法

时间:2014-09-30 12:27:33

标签: c# entity-framework web-services

我使用C#.net中的Entity Frame工作创建了web api。我有一个控制器类,我在其中定义了一些像这样的方法。

 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'的成员,它具有相同的参数类型。我正在尝试按公司名称和联系人姓名检索数据。请帮助我。

2 个答案:

答案 0 :(得分:3)

您的方法签名含糊不清。更改名称将解决问题:

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

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

在两个方法调用中,编译器唯一看到的就是this(签名):

Info GetByContact(string)

它不知道如何在companycontact参数之间进行选择。

答案 1 :(得分: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。)