stu*_*e06 2 .net c# asp.net-web-api
我为我的 Web API 应用程序创建了一个自定义异常过滤器。该过滤器相当简单,并使用字典将异常类型映射到 http 状态代码。
\n\nthis.Mappings = new Dictionary<Type, HttpStatusCode>\n{\n {typeof (ArgumentException), HttpStatusCode.BadRequest},\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n我遇到的问题是我定义了一个通用异常类型:
\n\nclass EntityNotFoundException<TEntity> : RepositoryException { /*... */ }\n
Run Code Online (Sandbox Code Playgroud)\n\n我想将此异常类型映射到HttpStatusCode.NotFound
.
this.Mappings = new Dictionary<Type, HttpStatusCode>\n{\n {typeof (ArgumentException), HttpStatusCode.BadRequest},\n {typeof (EntityNotFoundException<>), HttpStatusCode.NotFound},\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,由于泛型在编译时生成多个类,因此 EntityNotFoundException 的任何实例实际上都不与我的映射的键匹配。
\n\n例如,如果我这样做:
\n\nthrow new EntityNotFoundException<User>(userId);\n
Run Code Online (Sandbox Code Playgroud)\n\n过滤器确实捕获了异常,但是 \xc2\xad\xc2\xad\xc2\xad\xc2\xadtypeof(EntityNotFoundException<>)\xc2\xad\xc2\xad\xc2\xad\xc2\xad
并且typeof(EntityNotFoundException<User>)
不会生成相同的哈希值。
我看到两个选择:
\n\nEntityNotFoundException<User>
到HttpStatusCode.NotFound
,这将为我的每个实体创建一个映射。有没有更清洁的解决方案?
\n小智 5
您可以使用以下命令将特定泛型类型转换为其通用泛型类型(例如: fromList<int>
到):List<>
if (exceptionType.IsGenericType)
{
exceptionType = exceptionType.GetGenericTypeDefinition();
}
Run Code Online (Sandbox Code Playgroud)
然后您可以在字典中查找以找到EntityNotFoundException<>
.