我的一个API控制器方法路线是"api/Students/GetList"
。它接受两个参数:'studentKey'
和'isSenior'
如果我从单元测试中调用此方法如下,那么它可以正常工作:
Get("api/Students/GetList/Super/false")
但是,如果我打电话给跟随它没有进入方法的断点并抱怨"方法未找到":
Get("api/Students/GetList/?studentKey=Super&isSenior=false");
为什么呢?我的第二个网址出了什么问题?
我的Controller method
如下所示
[Route("GetList/{studentKey}/{isSenior}")]
public IEnumerable<StudentSummary> Get(string studentKey, bool isSenior)
{
// code
}
答案 0 :(得分:0)
由于您已在route
- 方法之上定义了Get
属性,因此控制器正在查找与您指定的完全相同的网址。
[Route("GetList/{studentKey}/{isSenior}")]
网址"api/Students/GetList/Super/false"
匹配,因为您正在查看方法Students
的控制器GetList
。此外,GetList
方法需要使用/
分隔的2个参数。这是您在属性中指定的内容。
问题是,您的第二个网址"api/Students/GetList/?studentKey=Super&isSenior=false"
与这些约束不匹配,因此无法找到该方法。
为了避免这些问题,我建议你过度思考你的架构。
如果我是对的,您将获得所有学生的列表,然后使用这些属性进行过滤。这不是它应该如何运作的。基本上,您应该使用所有资源(就像您在GetList
中所做的那样)或唯一资源(例如GetList/studentXY
)。