我正在构建一个非常简单的Web API。当被一个属性调用时,〜/ api /老师和一个老师调用它应该返回教师阵列,如本例中的电话号码〜/ api / teacher / 123。第一个工作正常,但第二个返回与第一个相同,我不能使用它。这是我的控制器
public class TeachersController : ApiController
{
Teacher[] teachers = new Teacher[]
{
new Teacher{FullName="Bob Jones", Email="bjones@hs.org",Phone="123",School="HighSchool"},
new Teacher{FullName="Laura Adams", Email="Lara@ms.org",Phone="223",School="MiddleSchool"},
new Teacher{FullName="Rick Douglas", Email="Rick@es.org",Phone="333",School="Elementary"}
};
public IHttpActionResult GetTeacher(string phone)
{
var teacher = teachers.FirstOrDefault((p) => p.Phone == phone);
if (teacher == null)
{
return NotFound();
}
return Ok(teacher);
}
public IEnumerable<Teacher> GetAllTeachers()
{
return teachers;
}
}
我正在使用默认路由,这似乎支持我对它应该如何工作的想法。
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我已尝试将路线更改为此处找到的某些内容,但无济于事。我做错了什么?
答案 0 :(得分:1)
将您的方法原型更改为
public IHttpActionResult GetTeacher(string id)
或强>
使用模板添加路线配置
&#34; API / {控制器} / {电话}&#34;
您的路由是为名为id
的参数定义的,该参数必须与参数名称匹配。您也可以更改路线以期望phone
而不是id