Câu hỏi liên quan đến việc xác định các tuyến tùy chỉnh với thuộc tính Route
.Định tuyến Web API 2 - Thuộc tính tuyến
Tôi biết rằng trong lớp WebApiConfig
bạn luôn xác định tuyến đường mặc định,
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
Những gì tôi không thể có được làm việc là khi tôi muốn vượt qua tham số khác. Tôi biết tôi có thể làm được điều này (mã dưới đây được định nghĩa bên dưới tuyến đường mặc định liệt kê ở trên):
//configuration.Routes.MapHttpRoute(
// name: "GetBrandImagePaths",
// routeTemplate: "api/{controller}/{id}/{type}");
Nhưng tôi thà, thay vì xác định tất cả các đường bay trong file WebApiConfig
, sử dụng định tuyến tùy chỉnh. Tuy nhiên, nếu tôi không có mã nhận xét ở trên trong tệp, tôi nhận được 404. Có dẫn tôi tin rằng tùy chỉnh Route
thậm chí không được xem xét.
public class HelperApiController : ApiController
{
[HttpGet]
[Route("api/helperapi/{id}/{type}")]
public string GetBrandImages(int id, string type)
{
.....
}
}
Làm cách nào để có thể sử dụng tuyến đường được xác định trong tệp WebApiConfig
và định tuyến tùy chỉnh trong bộ điều khiển API riêng lẻ.
Lưu ý rằng dự án này cũng là một dự án MVC (không chỉ WebApi). Có cái gì tôi đang mất tích, làm không chính xác, vv? Tôi biết có rất nhiều bài viết ra có xác định làm thế nào để vượt qua nhiều params, nhưng tôi nghĩ rằng câu hỏi của tôi là một chút cụ thể hơn về lý do tại sao một công trình và không phải là khác.
Vì vậy, nếu tôi thêm cuộc gọi đó, điều đó có gây rối các tuyến đường mặc định khác không? (kết quả hành động, vv)? Có thể nói rằng sử dụng 'config.MapHttpAttrubteRoutes()' chỉ dành cho các dự án WebApi thẳng không? –
Không, nó không ghi đè lên bất kỳ tuyến đường nào bạn đặt theo cách thủ công. Tuy nhiên, đừng trang trí các lớp 'Controller' đó với bất kỳ thuộc tính định tuyến nào nếu không bạn sẽ nhận được các tuyến trùng lặp và có khả năng xung đột. Tôi đã từng sử dụng các thuộc tính định tuyến cho các dự án WebApi nên không thể bình luận về sự phù hợp của chúng với MVC. – toadflakz
Vì vậy, nếu tôi không trang trí bất kỳ bộ điều khiển khác (không Api) w/'Route' hoặc' RoutePrefix' sau đó họ vẫn sẽ tuyến đường đến các thiết bị đầu cuối chính xác? –