Khi sử dụng ASP.NET Web API Trợ giúp Trang và liên quan MVC.ApiExplorer Tôi có tuyến đường hợp lệ mà có thể truy cập thông qua http chưa không được phát hiện bởi ApiExplorer. Các tuyến đường này chỉ được tìm thấy khi sử dụng quy tắc định tuyến chung. Việc sử dụng một quy tắc cụ thể hơn (kết hợp với quy tắc chung) dường như ẩn các tuyến từ ApiExplorer.tuyến đường hợp lệ không được phát hiện bởi MVC.ApiExplorer
Trong trường hợp ví dụ về ba quy tắc, hai tuyến liên quan đến hành động GET và POST trên phương thức điều khiển không có tham số truy vấn nào đi tới MIA.
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
Khi sử dụng một quy tắc định tuyến của
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Các tuyến đường được phát hiện một cách thích hợp bởi Api Explorer như
- POST: api/SomeController
- GET: api/SomeController
- NHẬN: api/SomeController/{id}
chưa khi thêm các quy tắc ít chung chung và có ý nghĩa hơn
routes.MapHttpRoute(
name: "ApiSomeControllerDefault",
routeTemplate: "api/somecontroller/{id}",
defaults: new
{
controller = "SomeController",
id = RouteParameter.Optional
}
);
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Api Explorer chỉ trả
- GET: api/somecontroller/{id}
gì đang gây ra một số tuyến đường của tôi không được tìm thấy?
EDIT Link to Issue Report on ApiExplorer project page
Tôi vừa xác minh loại bỏ quy tắc "ApiDefault" và để nguyên tắc "ApiSomeControllerDefault" thực sự làm cho các tuyến ẩn một lần có sẵn cho ApiExplorer. – rheone
Bạn đã xóa quy tắc ApiDefault như thế nào? – user3654055