Я не думаю, что вы можете перегрузить одно и то же имя действия одним глаголом по умолчанию. Как говорит тот другой поток, который вы указали, вы можете перегрузить методы и затем использовать атрибут, чтобы изменить действие, которое сопоставляется с методом, но я предполагаю, что это не то, что вы ищете.
Другой вариант, который я использовал ранее (зависит от того, насколько сложны / различны ваши перегрузки), заключается в том, чтобы просто использовать обнуляемые значения для параметров и эффективно объединять ваши разные сигнатуры. Так что вместо:
public ActionResult DoSomething(int id)...
public ActionResult DoSomething(string name)...
просто есть:
public ActionResult DoSomething(int? id, string? name)
Не самое удачное решение, но если одна перегрузка просто строится на другой, то это не слишком плохой компромисс.
Последний вариант, который, возможно, стоит попробовать (я не пробовал и даже не знаю, сработает ли он, но по логике должен), - написать реализацию ActionMethodSelectorAttribute
, которая сравнивает параметры, переданные в ControllerContext
в сигнатуру метода и пытаются найти лучшее соответствие (т.е. попытаться разрешить неоднозначность немного более строго, чем реализация по умолчанию).