Как я могу перегрузить действия ASP.NET MVC на основе принятых HTTP-глаголов?

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

 public static void Main()
 {
     StringWrapper testVariable = new StringWrapper("before passing");
     Console.WriteLine(testVariable);
     TestI(testVariable);
     Console.WriteLine(testVariable);
 }

 public static void TestI(StringWrapper testParameter)
 {
     testParameter = new StringWrapper("after passing");

     // this will change the object that testParameter is pointing/referring
     // to but it doesn't change testVariable unless you use a reference
     // parameter as indicated in other answers
 }
23
задан MetaGuru 14 June 2011 в 18:40
поделиться

2 ответа

Хотя ASP.NET MVC позволит вам иметь два действия с одним и тем же именем, .NET не позволит вам иметь два метода с одинаковой сигнатурой, то есть с одинаковым именем и параметрами.

Вам нужно будет называть методы по-разному, используя атрибут ActionName, чтобы сообщить ASP.NET MVC, что на самом деле это одно и то же действие.

Тем не менее, если вы говорите о GET и POST, эта проблема, скорее всего, исчезнет, ​​поскольку действие POST будет принимать больше параметров, чем GET, и, следовательно, будет различимым. [11] 1110]

Итак, вам нужно:

[HttpGet]
public ActionResult ActionName() {...}

[HttpPost, ActionName("ActionName")]
public ActionResult ActionNamePost() {...}

Или:

[HttpGet]
public ActionResult ActionName() {...}

[HttpPost]
public ActionResult ActionName(string aParameter) {...}
8
ответ дан Thom 14 June 2011 в 18:40
поделиться

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

Конечно, имейте в виду, что это не самый рекомендуемый способ действий, и вам также нужно будет четко указать в своем коде (по имени параметра или через комментарии), что это дополнительный аргумент, чтобы разрешить его. строить, и, конечно же, убедитесь, что вы украсили свои атрибуты правильно.

0
ответ дан yoel halb 14 June 2011 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: