2012-06-23 34 views
8

Tôi đang làm việc trên api web asp.net. Tôi cố gắng để thiết lập các tuyến đường mặc định cho dự án của tôi trong tập tin global.asax như,Cách thay đổi tuyến đường mặc định trong trang web asp.net api

localhost:45678/api/Products 

Nhưng tôi không tìm thấy bất kỳ định dạng tương tự như asp.net mô hình tuyến đường MVC như

url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

Nó luôn luôn chuyển hướng tôi vào Trang chủ (HomeController). xin vui lòng hướng dẫn cho tôi.

+0

Ý của bạn là gì "Nó luôn chuyển hướng tôi đến Trang chủ". Bạn có nghĩa là khi bạn điều hướng đến localhost: 45678/api/Sản phẩm chuyển hướng bạn hoặc khi bạn chạy dự án của mình từ Visual Studio thì trang đầu tiên bạn truy cập là trang chủ của bạn? –

+0

khi tôi chạy dự án của mình, nó chuyển hướng tôi đến Trang chủ. –

+0

Tôi đã cập nhật câu trả lời của tôi để trả lời bình luận của bạn. –

Trả lời

8

Kiểm tra lớp học RouteConfig trong thư mục App_Start của bạn. Bạn sẽ thấy tuyến đường mặc định bên dưới mà bạn có thể thay đổi.

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

EDIT

Sau khi đọc ý kiến ​​của bạn, tôi nghĩ vấn đề là không phải với tuyến đường của bạn. Tôi không chắc tại sao bạn lại muốn muốn làm điều đó, nhưng bạn chỉ cần chỉ định URL bắt đầu cho dự án của mình. Nhấp chuột phải vào dự án web của bạn - click Thuộc tính - nhấp vào Web tab - dưới Bắt đầu hành động chọn Bắt đầu URL và nhập http://localhost:45678/api/Products trong hộp. Lưu dự án của bạn và chạy lại. Nó sẽ bắt đầu tại vị trí mới.

+0

Tôi đã thử với mã này trong global.asax 'routes.MapHttpRoute ( tên:" DefaultApi ", routeTemplate:" api/{controller}/{id} ", mặc định: new {controller =" Products ", id = RouteParameter.Optional} ); 'nhưng nó vẫn chuyển hướng đến trang chủ. Tôi đã không tìm thấy lớp RouteConfig trong App_Start –

+0

Bạn có một bộ điều khiển được gọi là "ProductsController" kế thừa từ ApiController và làm bạn có một "công cộng IEnumerable Get()" phương pháp trên bộ điều khiển này? –

+0

vâng, tôi có 'công cộng IEnumerable GetAll() { trả lại sản phẩm; } 'trong sản phẩm bộ điều khiển: ApiController –

4

Sự cố có thể là lỗi phổ biến mà gần như nhiều người tham gia.

Thực tế ở đây là tất cả các tuyến đường được thu thập theo bộ sưu tập System.Web.Routing.RouteTable.Routes bất kể khung bạn sử dụng. Vì vậy, nếu bạn đặt tuyến đường mặc định ASP.NET MVC trước đường dẫn ASP.NET Web API, tuyến đường ASP.NET Web API sẽ không bao giờ được quét bởi vì tuyến đường MVC sẽ phù hợp.

Tôi giả định đây là trường hợp ở đây bằng cách xem xét những gì bạn đã cung cấp cho đến thời điểm này. Nếu đó không phải là trường hợp, tải lên các giải pháp đầy đủ ra có một nơi nào đó và mọi người có thể có một cái nhìn đầy đủ.

+0

vì vậy tôi có thể biết phải làm gì không? –

0

[EDIT: Câu trả lời của tôi là giống như Kevin]

Bạn có nói rằng khi bạn chạy các dự án từ Visual Studio, nó sẽ mở ra một trình duyệt để trang chủ dự án?

Mẫu dự án API Web chứa bộ điều khiển MVC cùng với bộ điều khiển API Web.

URI "http: // localhost: xxxx /" đi bộ điều khiển MVC, trong khi "http: // localhost: xxx/api/products" chuyển đến bộ điều khiển API.

Khi bạn chạy dự án trong Visual Studio, nó sẽ điều hướng đến "http: // localhost: xxxx" theo mặc định. Trong hoạt động bình thường, một khách hàng sẽ yêu cầu bất kỳ URI nào họ muốn.

Bạn có thể thay đổi cài đặt Visual Studio trong Thuộc tính dự án/Web/Hành động bắt đầu.

1

Thực ra, nếu chúng ta ở vị trí đặt tuyến đường mặc định trong thuộc tính-> web-> vị trí bắt đầu. thì cần có bảng định tuyến, tuyến tùy chỉnh, RegisterRoutes trong tệp global.asax là gì.Tôi cố gắng cho cách này

lúc đầu nó có vẻ như,

routes.MapHttpRoute(
    name: "Default Api", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Bây giờ tôi muốn làm localhost:xxxx/api/products như tuyến đường mặc định cho api web của tôi sau đó,

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

Nhưng kết quả không sử dụng .

+2

Bạn có thể cải thiện câu hỏi của mình thay vì đăng cập nhật làm câu trả lời không?(SE không hoạt động như một diễn đàn) Cảm ơn –

+1

Leandro là đúng, điều này nên được chỉnh sửa trong câu hỏi ban đầu. Đề xuất xóa. –

0

Tôi nghĩ bạn đã nhảy múa xung quanh giải pháp nhưng chỉ bỏ lỡ dấu. Hãy thử điều này:

  1. Đảm bảo bạn đang gọi GlobalConfiguration.Configure (WebApiConfig.Register); trong Global.asax.cs của bạn.

  2. Trong WebApiConfig.Register() Đặt tuyến đường mặc định như:

    routes.MapHttpRoute (tên: "DefaultApi", routeTemplate: "api/{Controller}/{id}", giá trị mặc định: mới {controller = "Sản phẩm", id = RouteParameter.Optional});

  3. Trong thiết lập dự án web của bạn chắc chắn rằng bạn có "Start Url" bất động sản thiết lập như:

    localhost: 45678

Good Luck.

0

Khởi động lại VS với quyền quản trị viên đã giải quyết vấn đề này cho tôi. Thông tin môi trường: - Hệ điều hành: Windows 10 (64 bit) - Visual studio: 2017.

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