我正在尝试解决此问题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
实施DiagnosticAnalyzer
,VisitMethods(SyntaxNodeAnalysisContext ctx)
方法中的逻辑对于API方法不正确。所以我想在这个方法中添加这样的检查,以排除所有返回ViewResult
实例的控制器方法,因为API方法不会返回视图。
你能建议我如何遍历C#(和VB)方法体并查找一个体是否包含任何返回ViewResult实例的语句?
答案 0 :(得分:0)
在方法的节点上调用.DescendantNodes()
并过滤所有return
语句。
对于您找到的每个return
语句,检查.Expression
(可能不存在)的TypeSymbol(来自语义模型)是否可转换为ViewResult
。
要处理表情健全的成员,请对ArrowExpressionClause
执行相同的检查。