2010-10-02 42 views
64

Tôi có thể trang trí một hành động hoặc với [AcceptVerbs (HttpVerbs.Post)]/[AcceptVerbs (HttpVerbs.Get)]Sự khác nhau giữa [AcceptVerbs (HttpVerbs.Post)] và [HttpPost] là gì?

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

hoặc qua các nhân [HttpPost]/[HttpGet] thuộc tính

[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ỉ ngắn tay – dbones

+0

cách biểu thức như [HttpPost] được gọi trong asp net mvc? trang trí? – andi

+0

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

Trả lời

49

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

+4

Bạn có chắc chắn không? Nếu có, xin hãy nhìn vào câu trả lời dưới đây! –

+0

Không, chúng là INVERSE của nhau –

157

[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)].

+14

đây là câu trả lời chính xác và nhiều thông tin hơn so với câu trả lời được chấp nhận. – 24x7Programmer

+0

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

+1

Tôi thích nhất quán, có nghĩa là tiếc là chỉ "cũ" AcceptVerbs là cách mà sẽ luôn luôn làm việc, xấu hổ. Microsoft nên thay đổi thuộc tính để cho phép sử dụng nhiều và xử lý phù hợp trong đường ống của họ, để ngăn chặn phương pháp "mới" này gây ra sự nhầm lẫn và rắc rối, ví dụ: http://stackoverflow.com/questions/16658020/public-action-method-was-not-found-on-controller –

Các vấn đề liên quan