No nos ha dicho por qué necesita esto, pero una posibilidad es utilizar la reflexión:
public List<string> ActionNames(string controllerName)
{
var types =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
where typeof(IController).IsAssignableFrom(t) &&
string.Equals(controllerName + "Controller", t.Name, StringComparison.OrdinalIgnoreCase)
select t;
var controllerType = types.FirstOrDefault();
if (controllerType == null)
{
return Enumerable.Empty<string>().ToList();
}
return new ReflectedControllerDescriptor(controllerType)
.GetCanonicalActions().Select(x => x.ActionName)
.ToList();
}
Obviamente como sabemos reflexión no es muy rápido, por lo tanto, si tiene la intención de llamar a este método con frecuencia, puede considerar mejorarlo almacenando en la memoria caché la lista de controladores para evitar buscarlo cada vez e incluso memoizing el método para los parámetros de entrada dados.
Voy a poner un comentario aquí, porque es general. Por lo que está tratando de hacer (nombres de acciones de controlador) no es la forma en que debería hacerse. Puede haber varias acciones con el mismo nombre y algunas pueden ser solo Ajax, etc. Sus permisos deben basarse en otras cosas que no sean acciones del controlador. –