控制器单元测试问题与构造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
}

控制器单元测试问题与构造URL

由于您已经在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)。