控制器单元测试问题与构造URL
本文关键字:URL 单元测试 问题 控制器 | 更新日期: 2023-09-27 18:05:25
我的API Controller方法路由之一是"api/Students/GetList"
。它接受两个参数:'studentKey'
和'isSenior'
如果我从我的单元测试中调用这个方法,如下所示,那么它工作正常:
Get("api/Students/GetList/Super/false")
但是如果我像下面这样调用,它不会去到方法的断点,并抱怨"方法未找到":
Get("api/Students/GetList/?studentKey=Super&isSenior=false");
为什么?我的第二个URL有什么问题?
我的Controller method
看起来像下面
[Route("GetList/{studentKey}/{isSenior}")]
public IEnumerable<StudentSummary> Get(string studentKey, bool isSenior)
{
// code
}
由于您已经在Get
-方法上定义了route
属性,因此控制器正在寻找与您指定的URL完全相同的URL。
[Route("GetList/{studentKey}/{isSenior}")]
URL "api/Students/GetList/Super/false"
匹配,因为您正在控制器Students
中查找方法GetList
。此外,GetList
方法需要用/
分隔两个参数。这是你在属性中指定的。
问题是,您的第二个URL "api/Students/GetList/?studentKey=Super&isSenior=false"
不匹配这些约束,因此无法找到该方法。
为了避免这类问题,我建议您仔细考虑您的体系结构。
如果我是正确的,你得到所有学生的列表,然后过滤这些属性。这不应该是这样的。基本上,您应该处理所有资源(如GetList
)或唯一的资源(如GetList/studentXY
)。