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