是否可以查找给定类型的所有名称别名(例如 "int" 与 "Int32")?

Is it possible to look up all name alias of a given type (e.g. "int" versus "Int32")?

我一直在编写单元测试来验证 MVC 路由的有效性。例如,

[Route("foo/bar/{id:int}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

有效,但

[Route("foo/bar/{id:List<string>}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

[Route("foo/bar/{buzz:int}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

不会。

但问题是我得到了漏报,因为在上面的第一个示例中,当我检查路由中的 {int:id} 是否与操作方法中的参数匹配时,类型的名称参数是 Int32 通过反射,我不知道如何让我的测试知道 Int32int 相同。有办法吗?

我相信您正在编写这些单元测试,以确保您配置的路由采用合适的方法,并确保在任何签名更改时,您的测试套件也会强制您更改路由约束。

因此,我假设您的第一种方法确实有效,而您遇到的唯一问题是 if("int" == parameterType.Name) 写在测试方法的某处。

由于您希望测试知道 "int" 和 "Int32" 相同,因此您需要这些别名的列表。可以找到here。此列表包含来自 .Net Framework 的 class 名称以及 C# 内置别名。只需创建并填充一个字典并根据它进行检查。是的,您必须手动输入这些对。

请记住,一些路由约束不仅仅是一种数据类型(例如最大或长度),但您也可以针对对应的数据类型(在示例中为 int 和 string)测试它们。