检查方法体是否会返回ViewResult

时间:2017-07-15 14:42:21

标签: roslyn roslyn-code-analysis

我正在尝试解决此问题https://github.com/dotnet-security-guard/roslyn-security-guard/issues/60受影响的文件为https://github.com/dotnet-security-guard/roslyn-security-guard/blob/master/RoslynSecurityGuard/Analyzers/CsrfTokenAnalyzer.cs

实施DiagnosticAnalyzerVisitMethods(SyntaxNodeAnalysisContext ctx)方法中的逻辑对于API方法不正确。所以我想在这个方法中添加这样的检查,以排除所有返回ViewResult实例的控制器方法,因为API方法不会返回视图。

你能建议我如何遍历C#(和VB)方法体并查找一个体是否包含任何返回ViewResult实例的语句?

1 个答案:

答案 0 :(得分:0)

在方法的节点上调用.DescendantNodes()并过滤所有return语句。

对于您找到的每个return语句,检查.Expression(可能不存在)的TypeSymbol(来自语义模型)是否可转换为ViewResult

要处理表情健全的成员,请对ArrowExpressionClause执行相同的检查。