[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はMVC2.0 +であり、Matthewが言ったように、その速記
2010年

[HttpPost]のような式はaspnet mvcでどのように呼び出されますか?デコレータ?
andilabs 2014


[AcceptVerbs("GET")]ヘルプドキュメントで生成されているそのアクションのエントリを停止できることがわかりました。
CompanyDroneFromSector7G 2017年

回答:


55

何もありません。一方はもう一方の省略形です。


1
1つのエンドポイントでgetとpostを受け入れるだけではありません。そのエンドポイントのポイントは何ですか?
先生

それは間違っているので、これは提案された答えであるべきではありません。
ジョンロード

200

[HttpPost]の省略形です[AcceptVerbs(HttpVerbs.Post)]。唯一の違いは[HttpGet, HttpPost]、同じアクションで一緒に(および同様に)使用できないことです。アクションがGETとPOSTの両方に応答するようにする場合は、を使用する必要があります[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]


20
これは、受け入れられたものよりも正確で有益な答えです。
24x7Programmer 2013

1
[HttpPost]と[HttpGet]を使用することを好みます。1つのアクションで両方が必要な場合:どちらも使用しないでください(PUT、DELETEなどは必要ないため)
Sergey G.

1
私は一貫性を好みます。つまり、残念ながら「古い」AcceptVerbsだけが常に機能する方法です。残念です。Microsoftは属性を変更して、パイプラインで複数の使用と処理を許可し、この「新しい」方法が混乱とトラブルを引き起こすのを防ぐ必要があります。例:stackoverflow.com/questions/16658020/…–
Tony Wall

2
@CodeChief簡単な思考実験により、その理由が明らかになります...AcceptVerbs属性は単一のFlagsパラメーターを取ります。Or-ingによって複数のフラグを設定します。[HttpPost]は単なる省略[AcceptVerbs(HttpVerbs.Post)] 形です。省略形を使用する場合、ORフラグを一緒に使用できるメカニズムはありません。これが、AcceptVerbsがまだ存在する理由です(下位互換性の理由を超えて)。
ロバートハーベイ2015年

@ RobertHarvey-それらが何であるかは明らかです。議論は、2つの異なるHttpGet属性とHttpPost属性が一緒に機能することを許可しない理由です。私が考えなければならないのは、開発チームのトレーニングと構築です。他の開発者に何をするように指示しますか...「ああ、この属性を使用します...しかし、この場合は他の属性を使用します...」。したがって、一貫性を保つために、人々に使用するように指示できるのは、単純にAcceptVerbsだけです。HttpGet / HttpPostのこの制限は直感的ではなく、おそらくバグです。全体的に大きな問題ではなく、単なる「落とし穴」です。
トニーウォール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.