ASP.NET MVC - переопределение действия с различными параметрами

У меня есть контроллер, который наследуется от базового контроллера. Оба имеют действие edit (post), которое принимает два аргумента:

На базовом контроллере:

[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)

И в производном контроллере:

[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)

Если я оставлю это, я получаю исключение, потому что есть неоднозначный вызов. Однако я не могу использовать override для производного действия, потому что сигнатуры метода не точно совпадают. Могу ли я здесь что-нибудь сделать?

Ответ 1

В качестве дополнения к дизайну разработчика ответ на этот вопрос будет следующим:

оставить базовый метод таким, какой он есть, и в вашем производном классе реализовать базовый метод и аннотировать его с помощью [NonAction]

[NonAction]
public override ActionResult Edit(IdType id, FormCollection form)
{
   // do nothing or throw exception
}

[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)
{
   // your implementation
}

Ответ 2

Я бы связал его:

На базовом контроллере:

[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)

И в производном контроллере:

[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)
{
     var newId = //some enum? transform
     var boundModel = UpdateModel(new SomeViewModel(), form);

     return Edit( newId, boundModel );
}

[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)

Я не тестировал это, передавая метод Post другому, должен работать. Таким образом могут быть последствия для безопасности.