Любой открытый метод, который возвращает string
, bool
или ActionResult
в классе Controller, рассматривается как действие.Если вы хотите пометить его как действие, вы можете использовать атрибут [NonAction]
:
[NonAction]
public bool PubMethod( out string param1)
{
return false;
}
, это прекрасно работает, если вы не используете маршрутизацию сопоставления атрибутов.Приложение запускается, и метод не рассматривается как действие (его нельзя использовать как таковое, поскольку у него есть выходной параметр), все довольны.
Если вместо этого вы используете атрибут маршрутизации:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
атрибут [NonAction]
игнорируется, и приложение вылетает на линии
routes.MapMvcAttributeRoutes();
, жалуясь на то, что PubMethod действие не может быть вызвано, поскольку оно имеет параметр by ref.
Я не могу найти упоминаний об этом в документации.Любой способ пометить открытый метод как неактивное действие при использовании маршрутизации атрибута?