diff --git a/src/Microsoft.AspNetCore.Mvc.Analyzers/ApiControllerAnalyzerContext.cs b/src/Microsoft.AspNetCore.Mvc.Analyzers/ApiControllerAnalyzerContext.cs index b1e4c81b00..1ab36e3dac 100644 --- a/src/Microsoft.AspNetCore.Mvc.Analyzers/ApiControllerAnalyzerContext.cs +++ b/src/Microsoft.AspNetCore.Mvc.Analyzers/ApiControllerAnalyzerContext.cs @@ -54,6 +54,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers return method.ContainingType.HasAttribute(ApiControllerAttribute, inherit: true) && method.DeclaredAccessibility == Accessibility.Public && + method.MethodKind == MethodKind.Ordinary && !method.IsGenericMethod && !method.IsAbstract && !method.IsStatic && diff --git a/src/Microsoft.AspNetCore.Mvc.Analyzers/ControllerAnalyzerContext.cs b/src/Microsoft.AspNetCore.Mvc.Analyzers/ControllerAnalyzerContext.cs index 503459ba02..8a9d403a8a 100644 --- a/src/Microsoft.AspNetCore.Mvc.Analyzers/ControllerAnalyzerContext.cs +++ b/src/Microsoft.AspNetCore.Mvc.Analyzers/ControllerAnalyzerContext.cs @@ -37,6 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers return method.ContainingType.HasAttribute(ControllerAttribute, inherit: true) && method.DeclaredAccessibility == Accessibility.Public && + method.MethodKind == MethodKind.Ordinary && !method.IsGenericMethod && !method.IsAbstract && !method.IsStatic && diff --git a/test/Microsoft.AspNetCore.Mvc.Analyzers.Test/ApiActionsAreAttributeRoutedFacts.cs b/test/Microsoft.AspNetCore.Mvc.Analyzers.Test/ApiActionsAreAttributeRoutedFacts.cs index 71a24bd24f..d0f87dcdb7 100644 --- a/test/Microsoft.AspNetCore.Mvc.Analyzers.Test/ApiActionsAreAttributeRoutedFacts.cs +++ b/test/Microsoft.AspNetCore.Mvc.Analyzers.Test/ApiActionsAreAttributeRoutedFacts.cs @@ -76,6 +76,28 @@ public class PetController : Controller Assert.Empty(result); } + [Fact] + public async Task NoDiagnosticsAreReturned_ForConstructors() + { + // Arrange + var test = +@" +using Microsoft.AspNetCore.Mvc; + +[ApiController] +public class PetController : Controller +{ + public PetController(){ } +}"; + var project = CreateProject(test); + + // Act + var result = await GetDiagnosticAsync(project); + + // Assert + Assert.Empty(result); + } + [Fact] public async Task NoDiagnosticsAreReturned_ForNonActions() {