2015-10-06 56 views
9

Khi tôi truy cập vào các url vênh vang: http://localhost:28483/swagger/ui/index, nó tạo ra lỗi này:Web Api - Swagger lỗi tài liệu 500

500 : undefined http://localhost:28483/swagger/docs/v1 

Bất kỳ ý tưởng?

CẬP NHẬT: Xem lỗi chi tiết này trong firebug:

Not supported by Swagger 2.0: Multiple operations 
with path 'api/BimModel' and method 'GET'. See the config setting - \"ResolveConflictingActions\" for 
a potential workaround 
+0

lỗi của bạn là gì? –

+0

@CuongLe: Đó là tất cả những gì tôi có trong trình duyệt. –

Trả lời

7

Swagger có thể được xem xét hai hành động như một hoạt động (như trong trường hợp kịch bản phổ biến này) ...

GET api/Products 
GET api/Products/{id} 

Có vẻ như bạn có thể sử dụng attribute routing để sửa lỗi này và sử dụng các thuộc tính ở trên hành động của bạn để vênh vang sẽ nhận ra chúng một cách riêng biệt.

[Route("api/Products")] 

[Route("api/Products/{id:guid}")] 
1

Trong bộ điều khiển, nó có hai hoạt động GET khác nhau và nó là không được phép bởi Swagger. Tôi khuyên bạn chỉ nên thực hiện thao tác GET đơn cho mỗi bộ điều khiển hoặc modify the router in WebApiConfig

+1

Thật không may là việc sửa đổi bộ định tuyến trong ApiConfig không giúp ích gì. Vẫn nhận được 'Không được hỗ trợ bởi Swagger 2.0: Nhiều thao tác với đường dẫn ...'. Có vẻ như tôi phải tạo bộ điều khiển mới cho mỗi phương thức get hoặc có cách nào khác để buộc swagger hợp tác (một số thuộc tính, ...) không? – wolen

3

Bạn đã thử kích hoạt tính năng này trong cấu hình sao chép?

c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 
+1

Mặc dù điều này có thể giải quyết được lỗi nhưng các hành động khác sẽ không hiển thị sau đó trong quá trình chuyển đổi. – Evan

0

Tôi gặp vấn đề tương tự khi kết hợp định tuyến thuộc tính với các tuyến mặc định. Khi tôi xóa tuyến đường mặc định, sự cố đã biến mất. Nhược điểm là, mà không có định tuyến mặc định được xác định, tôi đã phải thêm thuộc tính định tuyến cho tất cả các bộ điều khiển của tôi.

Vì vậy, từ WebApiConfig tôi loại bỏ:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Và thêm thuộc tính định tuyến để điều khiển của tôi:

[Route("Session")] // Added this attribute 
public async Task<IHttpActionResult> Get() 
...  
[Route("Session/{id}")] // Added this attribute 
public async Task<IHttpActionResult> Get(int id) 

Trên thực tế tôi sử dụng một [RoutePrefix("Session")] trên điều khiển của tôi và sử dụng [Route("")] về phương pháp của tôi, nhưng kết quả sẽ giống nhau.

0

Tôi đã nhận được lỗi này do các tên thông số không khớp giữa tuyên bố Định tuyến phân bổ và chữ ký phương thức.

[HttpGet("{id}")] 
public IActionResult Get(string deviceNumber){ 
... 

Sau khi thay đổi "{id}" thành "{deviceNumber}", nó đã sửa lỗi.

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