Во-первых, думайте о ActionResult просто как о конкретном типе конструкции, возвращаемой MVC, которая обеспечивает особое удобство с точки зрения способа внутренней обработки ActionResult в рамках MVC.Поэтому тот факт, что что-то является ActionResult , не обязательно означает «, это должно быть общедоступным ».Фактически, любой открытый метод в контроллере MVC будет рассматриваться как метод действия, независимо от того, возвращает ли он ActionResult .
Таким образом, просто имея возвращаемый тип, который isn't ActionResult не обязательно предотвратит раскрытие этого метода как общедоступного действия, которое может быть вызвано через URL.
Может быть много причин, по которым вы этого не делаетехотите представить метод как действие, которое может быть вызвано через URL, и в случае, если вы хотите «защитить» от этого, именно тогда вы используете атрибут [NonAction '].