我使用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'的成员,它具有相同的参数类型。我正在尝试按公司名称和联系人姓名检索数据。请帮助我。
答案 0 :(得分:3)
您的方法签名含糊不清。更改名称将解决问题:
public Info GetByCompany(string company)
{
return InfoRepository.GetInfoByCompany(company);
}
public Info GetByContact(string contact)
{
return InfoRepository.GetInfoByContact(contact);
}
在两个方法调用中,编译器唯一看到的就是this(签名):
Info GetByContact(string)
它不知道如何在company
和contact
参数之间进行选择。
答案 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
。)