Перегрузка методов контроллера MVC asp.net с одним и тем же глаголом? - PullRequest
13 голосов
/ 17 июля 2009

Во всех примерах, которые я видел для перегрузки, обычно есть только два метода с одинаковыми именами с разными параметрами, один из которых использует глагол GET, а другой - POST. Возможно ли сделать две или более перегрузки одним и тем же методом, все с одним и тем же глаголом?

Вот пример того, что я имею в виду: Можете ли вы перегрузить методы контроллера в ASP.NET MVC?

Ответы [ 2 ]

8 голосов
/ 17 июля 2009

Я не думаю, что вы можете перегрузить одно и то же имя действия одним глаголом по умолчанию. Как говорит тот другой поток, который вы указали, вы можете перегрузить методы и затем использовать атрибут, чтобы изменить действие, которое сопоставляется с методом, но я предполагаю, что это не то, что вы ищете.

Другой вариант, который я использовал ранее (зависит от того, насколько сложны / различны ваши перегрузки), заключается в том, чтобы просто использовать обнуляемые значения для параметров и эффективно объединять ваши разные сигнатуры. Так что вместо:

public ActionResult DoSomething(int id)...
public ActionResult DoSomething(string name)...

просто есть:

public ActionResult DoSomething(int? id, string? name)

Не самое удачное решение, но если одна перегрузка просто строится на другой, то это не слишком плохой компромисс.

Последний вариант, который, возможно, стоит попробовать (я не пробовал и даже не знаю, сработает ли он, но по логике должен), - написать реализацию ActionMethodSelectorAttribute, которая сравнивает параметры, переданные в ControllerContext в сигнатуру метода и пытаются найти лучшее соответствие (т.е. попытаться разрешить неоднозначность немного более строго, чем реализация по умолчанию).

0 голосов
/ 17 июля 2009

Я думаю, это не так. Так как я обнаружил, что инфраструктура MVC, на самом деле, не заботится о том, что вы помещаете в список параметров, например, мое действие выглядит так:

public ActionResult Index(int id) {...}

Можно запросить вот так: Domain.com/Index.aspx или Domain.com/Index.aspx?id=012901 или даже Domain.com/Index.aspx?login=938293

Поскольку перегрузка в языке программирования означает, что вы выбираете различные функции (с одинаковым именем), используя входные параметры, но MVC в этом случае не заботился об этом! Так что, кроме перегрузки ActionVerb, я думаю, что это не нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...