В чем разница между [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 не является интуитивным, возможно, это ошибка. В целом это не большая проблема, просто «попался».
Тони Уолл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.