В чем разница между [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
как выражения типа [HttpPost] вызываются в asp net mvc? декораторы?
andilabs
@andi Они называются «Атрибуты» msdn.microsoft.com/en-us/library/z0w1kczw.aspx
Габриэль Эспиноза
Я обнаружил, что это [AcceptVerbs("GET")]может остановить создание записи для этого действия в справочной документации.
CompanyDroneFromSector7G

Ответы:

55

Ничего. Одно просто сокращение для другого.

Мэтью Манела
источник
1
Нельзя просто принимать и отправлять сообщения в одной конечной точке. В чем смысл этой конечной точки?
сенсей
это не должен быть предлагаемый ответ, поскольку он неверен.
Джон Лорд
201

[HttpPost]это сокращение для [AcceptVerbs(HttpVerbs.Post)]. Единственная разница в том, что вы не можете использовать [HttpGet, HttpPost](и аналогичные) вместе в одном действии. Если вы хотите, чтобы действие отвечало как на GET, так и на POST, вы должны использовать [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].

Рудреша Парамешаппа
источник
20
это более правильный и информативный ответ, чем принятый.
24x7Programmer
1
Я предпочитаю использовать [HttpPost] и [HttpGet]. Когда мне нужны они оба для одного действия: просто не используйте их (так как вам не нужны PUT, DELETE или другие)
Сергей Г.
1
Я предпочитаю последовательность, а это означает, что, к сожалению, только "старый" AcceptVerbs - это способ, который всегда будет работать, позор. Microsoft должна изменить атрибут, чтобы разрешить многократное использование и обработать это соответственно в своем конвейере, чтобы этот «новый» метод не приводил к путанице и проблемам, например, stackoverflow.com/questions/16658020/…
Тони Уолл
2
@CodeChief Быстрый мысленный эксперимент прояснил бы, почему это так ... AcceptVerbsАтрибут принимает единственный параметр Flags. Вы устанавливаете несколько флагов, нажимая их. [HttpPost]является просто сокращением для [AcceptVerbs(HttpVerbs.Post)] Нет механизма, доступного для флагов ИЛИ вместе, если вы используете сокращение; вот почему AcceptVerbs все еще существует (помимо соображений обратной совместимости).
Роберт Харви,
@RobertHarvey - Понятно, что это такое, обсуждается, почему нельзя позволить двум различным атрибутам HttpGet и HttpPost работать вместе. Я должен думать о обучении и создании команд разработчиков. Что вы скажете другим разработчикам ... «О, используйте этот атрибут ... но в данном случае используйте другой ...». Следовательно, для единообразия вы можете просто посоветовать людям использовать AcceptVerbs. Это ограничение HttpGet / HttpPost не является интуитивным, возможно, это ошибка. В целом это не большая проблема, просто «попался».
Тони Уолл