Sử dụng Bộ điều khiển Api mới trong MVC4 và tôi đã tìm thấy sự cố. Nếu tôi có các phương pháp sau:Bộ điều khiển api khai báo nhiều câu lệnh Get
public IEnumberable<string> GetAll()
public IEnumberable<string> GetSpecific(int i)
này sẽ làm việc. Tuy nhiên, nếu tôi muốn lấy một số dữ liệu khác nhau của một loại khác nhau, nó mặc định là phương pháp GetAll
, mặc dù $.getJSON
được thiết lập để các GetAllIntegers
phương pháp:
public IEnumberable<int> GetAllIntergers()
(quy ước đặt tên xấu)
Tôi có thể làm điều này không?
Tôi chỉ có thể có một phương thức GetAll
đơn trong bộ điều khiển API Web không?
Tôi nghĩ rằng sẽ dễ dàng hơn để hình dung những gì tôi đang cố gắng đạt được. Dưới đây là một đoạn mã để hiển thị những gì tôi muốn có thể làm, trong một đơn ApiController
:
public IEnumerable<string> GetClients()
{ // Get data
}
public IEnumerable<string> GetClient(int id)
{ // Get data
}
public IEnumerable<string> GetStaffMember(int id)
{ // Get data
}
public IEnumerable<string> GetStaffMembers()
{ // Get data
}
Câu hỏi nhanh, tôi có thể định tuyến như thế này và vẫn gọi các phương thức của tôi chỉ "Đăng" và yêu cầu chúng tự động chấp nhận HttpPost nếu tôi bao gồm một ActionNameAttribute? – Alxandr
@Alxandr Bạn vẫn sẽ phải sử dụng AcceptVerbsAttribute (hoặc HttpPostAttribute, HttpGetAttribute vv) – tpeczek
Tôi đang gặp một số vấn đề với định tuyến - Tôi có thể định nghĩa nhiều phương thức "GET", nhưng nếu tôi nhấn/api/{controller} máy chủ cung cấp cho một HTTP 500 "nhiều hành động tìm thấy" thay vì một 404. Bất kỳ ý tưởng làm thế nào để ngăn chặn điều này? Những gì tôi muốn là có/api/{controller}/{id} route để "Get, Post, Put, Delete, etc", sau đó có/api/{controller}/{id}/{action} để một hành động cụ thể, chẳng hạn như/api/Khách hàng/5/Sản phẩm. Không hoạt động - mọi thứ đều cung cấp lỗi "tìm thấy nhiều hành động". – ShadowChaser