2013-01-15 12 views
11

Giả sử rằng tôi có một lồng nhau một đến nhiều cơ sở dữ liệu hệ thống phân cấp kiểu như sau:Tuỳ chỉnh Routing với ASP.NET Web API

Một Region có nhiều nước; mỗi Quốc gia có nhiều Thành phố; a Thành phố phải thuộc về một và chỉ một quốc gia.

Suy diễn thông tin này vào một RDBMS là việc khá quan trọng, nhưng (để tâm trí của tôi) các thiết bị đầu cuối REST của hợp lý nhất để trả về một danh sách các nước cho một cho khu vực id sẽ giống như sau:

HTTP GET http://localhost/Region/3/Countries 

Theo mặc định, định tuyến của API Web .NET sẽ là, tốt nhất là http://localhost/Countries/Region/3 hoặc http://localhost/Region/Countries/3.

Có quy ước đặt tên hợp lý tôi nên tuân theo hay định tuyến có thể tùy chỉnh đủ để cho phép URI lấy bất kỳ hình dạng nào tôi thích không?

+0

Tôi cho rằng tôi nên thêm rằng tôi đang làm việc với một DBMS hiện có và muốn xây dựng các API công khai/riêng tư cho kho dữ liệu. –

Trả lời

17

Định tuyến phải đủ tùy chỉnh để nhận URL bạn đang tìm kiếm. Giả sử bạn muốn URL dưới dạng 'http: // localhost/Region/3/Các quốc gia', bạn có thể đăng ký lộ trình tùy chỉnh này:

config.Routes.MapHttpRoute("MyRoute", "Region/{regionId}/Countries", new { controller = "Region", action = "GetCountries" }); 

này sẽ cử yêu cầu đến hành động 'GetCountries' trên 'RegionController' lớp học. Bạn có thể có tham số regionId trên hành động khiến mô hình bị ràng buộc tự động cho bạn từ URI.

Bạn có thể muốn xem trực tuyến gói định tuyến thuộc tính cho WebAPI vì nó có thể phù hợp hơn trong trường hợp của bạn.

3

Định tuyến phải khá linh hoạt - câu hỏi sẽ là cách bạn muốn phân phối dữ liệu. Bạn có một bộ điều khiển trong tâm trí hoặc nhiều?

Nếu bạn đã có một RegionController Tôi không thấy lý do tại sao bạn không thể cấu hình một tuyến đường:

routes.MapHttpRoute(
    name: "CountryList", 
    routeTemplate: "{controller}/{regionId}/countries" 
); 

Và một phương pháp tương ứng:

public CountryCollection Get(int regionId) 

Hoặc tôi thiếu cái gì trong câu hỏi của bạn ? Định tuyến mặc định của bạn đến từ đâu?

Hãy nhìn vào tài liệu của họ:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web -api