2012-12-04 29 views
10

Có cách nào để thêm thư mục phụ trong thư mục Bộ điều khiển của dự án Webapi không?Thêm thư mục phụ trong thư mục điều khiển - .net webapi

Tôi đang nghĩ về một thứ như Controller/Customer bao gồm các bộ điều khiển cho mô-đun Khách hàng.

+0

những gì tôi muốn là phải có tên thư mục phụ trong URL. tức là: lolcalhost/weApp/{foldername}/{controller} – mangun

Trả lời

5

Bộ điều khiển không hoạt động theo cách đó. Trong Asp.NET cấu trúc thư mục của bạn là cấu trúc trang web của bạn. Trong WEB API, bộ điều khiển được tìm kiếm độc lập với cấu trúc. Như một vấn đề của thực tế, bạn có thể có chúng trong lắp ráp khác nhau và họ vẫn sẽ được tìm thấy bởi khuôn khổ. Định tuyến sẽ không hoạt động theo cách bạn mong đợi. Bạn có thể thêm tuyến đường nơi bạn có "tên thư mục", như bạn đã nói, localhost/WebApp/{foldername}/{controller}. Chỉ {foldername} có thể là tên thư mục tĩnh, đơn giản (localhost/WebApp/foldername/{controller}). Vì vậy, các khách hàng sẽ phải gọi url với "tên đăng nhập" trong nó, nhưng vị trí của mã sẽ không quan trọng vì khuôn khổ MVC không phân biệt cây thư mục dưới bộ điều khiển.

2

Điều tôi làm để giải quyết vấn đề này cho chính tôi là thêm một Maproute khác và thêm không gian tên trước bộ điều khiển. Chỉ cần lưu ý hai điểm:

  1. rout mới của bạn nên được trước khi mặc định một
  2. Bạn không thể thêm không gian tên cho mặc định một

    routes.MapRoute(
         name: "Secretariat", 
         url: "{namespace}/{controller}/{action}/{id}", 
         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        ); 
    
0

Những câu trả lời ở đây là sai . Bạn có thể dễ dàng làm điều này. Bạn chỉ cần sau đó xác định tuyến đường trên lớp điều khiển của bạn:

Tọa lạc tại /Controllers/Authentication thư mục

//An example of you specifying a diff. route than the folder path 
[Route("api/login")] 
public class LoginController {...} 
+1

Tôi nghĩ trong ví dụ của bạn ở đây, nó nên là '[RoutePrefix (" api/login ")]' và không '[Route (...)]'. Thuộc tính '[Route (...)]' sẽ đi vào các hành động riêng lẻ bên trong lớp 'LoginController'. – Jiveman

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