ASP.NET控制器总是返回相同的结果

时间:2014-06-06 18:51:04

标签: c# asp.net routing asp.net-mvc-routing

我正在构建一个非常简单的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 }
        );

我已尝试将路线更改为此处找到的某些内容,但无济于事。我做错了什么?

1 个答案:

答案 0 :(得分:1)

将您的方法原型更改为

  

public IHttpActionResult GetTeacher(string id)

使用模板添加路线配置

  

&#34; API / {控制器} / {电话}&#34;

您的路由是为名为id的参数定义的,该参数必须与参数名称匹配。您也可以更改路线以期望phone而不是id