【发布时间】:2017-05-22 23:05:05
【问题描述】:
好吧,我实际上是在尝试学习 WebApi,并假设我有一个场景,我有两个像这样的 get 方法
控制器
public class EmployeeApiController : ApiController
{
public List<Student> GetAllStudents() { ... }
public List<Student> EmailChange(string studentName, string Email) { ... }
public List<Student> AddressChange(string studentName, string Address) { ... }
}
public class Student
{
public string StudentName { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public static List<Student> students { get; set; }
}
我无法调用相应的方法,我该怎么做,我知道有很多博客,但它并没有帮助我理解如何真正访问这些方法。通过浏览几个博客,我编写了这样的整个代码
WebApiConfig 代码
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
控制器代码
public List<Student> GetAllStudents()
{
Student.students = new List<Student> {
new Student { StudentName="foo",Address="usa",Email="foo@yahoo.com"},
new Student { StudentName="joe",Address="mumbai",Email="joe@yahoo.com"},
new Student { StudentName="albert",Address="georgia",Email="albert@yahoo.com"},
new Student { StudentName="prince",Address="missisipi",Email="prince@yahoo.com"}
};
return Student.students;
}
[HttpGet]
public List<Student> UpdateEmail(string studentName, string Email)
{
return Student.students.Select(i =>
{
if (i.StudentName == studentName)
{
i.Email = Email;
}
return i;
}).ToList();
}
[HttpGet]
public List<Student> UpdateAddress(string studentName, string Address)
{
return Student.students.Select(x =>
{
if (x.StudentName == studentName)
{
x.Address = Address;
}
return x;
}).ToList();
}
}
public class Student
{
public string StudentName { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public static List<Student> students { get; set; }
}
我对如何使用 GET 请求访问 UpdateEmail 方法和 UpdateAddress 方法有点困惑。
更新 1
当我这样打电话时
http://localhost:53711/api/EmployeeApi/UpdateAddress 或
http://localhost:53711/api/EmployeeApi/UpdateEmail
我收到这样的错误
当我像这样拨打电话时,我会收到类似的错误
【问题讨论】:
-
添加您用于通话的路线。
-
@LijinJohn 你是对的我误读了错误信息。问题是您显示的所有操作都与输入的网址不匹配。
-
@Nkosi 请问你知道解决方案吗,其实我很长时间都在为这个问题挠头
-
假设你在url模板中有
{id}参数并且你在url中输入了foo,但是在任何action中都没有匹配的参数,所以路由无法匹配。foo到底应该填充什么? -
此外,用于您的操作的命名约定具有误导性。您正在执行 GET,但这些操作的名称中包含 Update。这通常意味着 POST 或 PUT 方法
标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing