2017-07-15 22 views
0

我试图解决这个问题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检查是否方法体conains的ViewResult返回

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

你能告诉我如何遍历一个C#(和VB)方法体,并找出一个正文是否包含任何返回ViewResult实例的语句?

+0

@ jeroen-vannevel是我的具体问题,现在有足够的细节? – Andrii

回答

0

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

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

要处理表达式成员,请执行ArrowExpressionClause的同一检查。