【问题标题】:Check whether method body conains ViewResult returns检查方法体是否包含 ViewResult 返回
【发布时间】:2017-07-15 14:42:20
【问题描述】:

我正在尝试解决这个问题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 实例的语句?

【问题讨论】:

  • @jeroen-vannevel 我的问题是否足够具体并且现在有足够的细节?

标签: roslyn roslyn-code-analysis


【解决方案1】:

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

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

要处理表达式主体成员,请对 ArrowExpressionClause 执行相同的检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2018-04-17
    • 2012-11-23
    • 2021-05-09
    • 2023-03-23
    • 2012-02-10
    • 2018-09-29
    • 2014-04-24
    相关资源
    最近更新 更多