У чому різниця між [AcceptVerbs (HttpVerbs.Post)] та [HttpPost]?


81

Я можу прикрасити дію за допомогою [AcceptVerbs (HttpVerbs.Post)] / [AcceptVerbs (HttpVerbs.Get)]

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string title)
{
    // Do Something...
}

або з атрибутами [HttpPost] / [HttpGet]

[HttpPost]
public ActionResult Create(string title)
{
    // Do Something...
}

Вони різні?


1
HttpPost - це MVC 2.0+, і як сказав Метью, його просто коротка рука
dbones

як у asp net mvc викликаються вирази на зразок [HttpPost]? декоратори?
andilabs

@andi Їх називають "атрибутами" msdn.microsoft.com/en-us/library/z0w1kczw.aspx
Габріель Еспіноза

Я виявив, що це [AcceptVerbs("GET")]може зупинити запис цієї дії, що генерується в довідкових документах.
CompanyDroneFromSector7G

Відповіді:


55

Нічого. Одне - просто стенографія іншого.


1
Не просто прийняти get і post в одній кінцевій точці. Який сенс у цій кінцевій точці?
сенсей

це не повинна бути запропонованою відповіддю, оскільки вона є неправильною.
Джон Лорд,

201

[HttpPost]це скорочення для [AcceptVerbs(HttpVerbs.Post)]. Єдина відмінність полягає в тому, що ви не можете використовувати [HttpGet, HttpPost](і подібні) разом для однієї дії. Якщо ви хочете, щоб дія відповідала як на GET, так і на POST, ви повинні використовувати [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].


20
це більш правильна та інформативна відповідь, ніж прийнята.
24x7 Програміст

1
Я вважаю за краще використовувати [HttpPost] та [HttpGet]. Коли вони мені потрібні для однієї дії: просто не використовуйте жодної (оскільки вам не потрібні PUT, DELETE чи інші)
Сергій Г.

1
Я віддаю перевагу послідовності, що означає, на жаль, лише "старі" AcceptVerbs - це спосіб, який завжди буде працювати, сором. Корпорація Майкрософт повинна змінити атрибут, щоб дозволити багаторазове використання та обробку відповідних процесів у своєму конвеєрі, щоб запобігти цьому "новому" методу, що спричиняє плутанину та неприємності, наприклад, stackoverflow.com/questions/16658020/…
Тоні Стін,

2
@CodeChief Швидкий продуманий експеримент пояснить, чому це так ... AcceptVerbsАтрибут приймає один параметр Flags. Ви встановлюєте кілька прапорів, стискаючи їх. [HttpPost]є просто скороченням для [AcceptVerbs(HttpVerbs.Post)] відсутності механізму, доступного для прапорів АБО разом, якщо ви використовуєте скорочення; ось чому AcceptVerbs все ще існує (крім причин зворотної сумісності).
Роберт Харві,

@RobertHarvey - Зрозуміло, що вони собою представляють, дискусія полягає в тому, чому не дозволити двом різним атрибутам HttpGet та HttpPost працювати разом. Що я повинен думати, це навчання та створення команд розробників. Що ви кажете іншим розробникам робити ... "О, використовуйте цей атрибут ... але в цьому випадку використовуйте інший ....". Отже, для узгодженості єдиним, що ви могли б сказати людям просто використовувати, є AcceptVerbs. Це обмеження HttpGet / HttpPost не є інтуїтивним, можливо, помилкою. Загалом не велика проблема, просто "суть".
Tony Wall
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.