控制器单元测试构建URL的问题

时间:2015-07-29 13:04:34

标签: c# unit-testing vs-unit-testing-framework

我的一个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
}

1 个答案:

答案 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)。