Sự khác biệt giữa [AcceptVerbs (HttpVerbs.Post)] và [HttpPost] là gì?


81

Tôi có thể trang trí một hành động bằng [AcceptVerbs (HttpVerbs.Post)] / [AcceptVerbs (HttpVerbs.Get)]

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

hoặc với các thuộc tính [HttpPost] / [HttpGet]

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

Chúng có khác nhau không?


1
HttpPost là MVC 2.0+, và như Matthew đã nói, nó chỉ là một bàn tay ngắn ngủi
dbone

các biểu thức như [HttpPost] được gọi như thế nào trong asp net mvc? người trang trí?
andilabs

@andi Chúng được gọi là "Thuộc tính" msdn.microsoft.com/en-us/library/z0w1kczw.aspx
Gabriel Espinoza

Tôi nhận thấy điều đó [AcceptVerbs("GET")]có thể ngăn một mục nhập cho hành động đó đang được tạo trong tài liệu trợ giúp.
CompanyDroneFromSector7G

Câu trả lời:


55

Không có gì. Một chỉ là viết tắt cho cái kia.


1
Người ta không chỉ chấp nhận lấy và đăng ở một điểm cuối. Mục đích của điểm cuối đó là gì?
sensei

đây không phải là câu trả lời gợi ý vì nó sai.
John Lord

200

[HttpPost]là viết tắt của [AcceptVerbs(HttpVerbs.Post)]. Sự khác biệt duy nhất là bạn không thể sử dụng [HttpGet, HttpPost](và tương tự) cùng nhau trên cùng một hành động. Nếu bạn muốn một hành động phản hồi cả GET và POST, bạn phải sử dụng [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].


20
đây là câu trả lời đúng và nhiều thông tin hơn câu trả lời được chấp nhận.
24x7Programmer 19/09/13

1
Tôi thích sử dụng [HttpPost] và [HttpGet]. Khi tôi cần họ cho cả một hành động: chỉ cần không sử dụng bất kỳ (kể từ khi bạn không cần PUT, DELETE hoặc những người khác)
Sergey G.

1
Tôi thích nhất quán, có nghĩa là chỉ có AcceptVerbs "cũ" là cách sẽ luôn hoạt động, thật xấu hổ. Microsoft nên thay đổi các thuộc tính cho phép nhiều cách sử dụng và quá trình mà theo đó trong đường ống dẫn của họ, để ngăn chặn điều này "mới" phương pháp gây nhầm lẫn và rắc rối, ví dụ như stackoverflow.com/questions/16658020/...
Tony Tường

2
@CodeChief Một thử nghiệm suy nghĩ nhanh sẽ làm rõ lý do tại sao nó lại như vậy ... AcceptVerbsThuộc tính nhận một tham số Flags. Bạn đặt nhiều cờ bằng cách Hoặc nhập chúng. [HttpPost]chỉ đơn thuần là viết tắt cho [AcceptVerbs(HttpVerbs.Post)] Không có cơ chế nào để OR gắn cờ với nhau nếu bạn sử dụng tốc ký; đó là lý do tại sao AcceptVerbs vẫn tồn tại (ngoài lý do tương thích ngược).
Robert Harvey

@RobertHarvey - Rõ ràng chúng là gì, cuộc thảo luận là tại sao không cho phép hai thuộc tính HttpGet và HttpPost khác nhau hoạt động cùng nhau. Điều tôi phải nghĩ đến là đào tạo và xây dựng đội ngũ phát triển. Bạn bảo các nhà phát triển khác làm gì ... "Ồ sử dụng thuộc tính này ... nhưng trong trường hợp này thì sử dụng thuộc tính kia ....". Do đó, để nhất quán, chỉ có một cách đơn giản mà bạn có thể yêu cầu mọi người sử dụng là AcceptVerbs. Hạn chế này của HttpGet / HttpPost là không trực quan, được cho là một lỗi. Nhìn chung không phải là một vấn đề lớn, chỉ là một "gotcha".
Tony Wall,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.