Tôi có một bộ điều khiển Web API với các hành động sau:Nhiều hành động cho HttpVerb cùng
[HttpPut]
public string Put(int id, JObject data)
[HttpPut, ActionName("Lock")]
public bool Lock(int id)
[HttpPut, ActionName("Unlock")]
public bool Unlock(int id)
Và các tuyến đường sau ánh xạ:
routes.MapHttpRoute(
name: "Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ApiAction",
routeTemplate: "api/{controller}/{action}/{id}"
);
Khi tôi thực hiện các yêu cầu sau đây mọi thứ hoạt động như mong đợi :
PUT /api/items/Lock/5
PUT /api/items/Unlock/5
Nhưng khi tôi cố gắng yêu cầu:
PUT /api/items/5
tôi nhận được ngoại lệ sau đây:
Multiple actions were found that match the request:
Put(int id, JObject data)
Lock(int id)
Unlock(int id)
Tôi đã thử thêm một tên hành động trống để các tuyến đường mặc định nhưng điều đó không giúp:
[HttpPut, ActionName("")]
public string Put(int id, JObject data)
Bất kỳ ý tưởng làm thế nào tôi có thể kết hợp mặc định Định tuyến RESTful với tên hành động tùy chỉnh?
EDIT: Cơ chế định tuyến không bị nhầm lẫn bởi lựa chọn bộ điều khiển. Nó bị nhầm lẫn bởi sự lựa chọn của hành động trên một bộ điều khiển duy nhất. Những gì tôi cần là để phù hợp với hành động mặc định khi không có hành động nào được chỉ định. Hy vọng rằng làm rõ mọi thứ.
Hình như điều này có thể trả lời Q của bạn: http://stackoverflow.com/questions/9499794/single-controller -with-multiple-get-methods-in-asp-net-web-api –
@GiscardBiamby Cảm ơn bạn đã liên kết, tôi xem qua một lần thử. –
@GiscardBiamby Bạn chắc chắn đã chỉ cho tôi đúng hướng. Câu trả lời này: http://stackoverflow.com/a/12185249/99373 đã giúp tôi tìm ra những gì tôi cần làm và nó đã hoạt động! Nếu bạn muốn có tín dụng, hãy đăng câu trả lời và tôi sẽ chấp nhận. –