Ответ 1
Вы не сказали нам, зачем вам это нужно, но одна возможность - использовать рефлексию:
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();
}
Очевидно, что мы знаем, что отражение не очень быстро, поэтому, если вы намерены часто вызывать этот метод, вы можете подумать о его улучшении, кэшируя список контроллеров, чтобы избежать его получения каждый раз и даже memoizing метод для заданных входных параметров.