Tôi muốn có hai hành động GET khác nhau để truy vấn dữ liệu bằng cách, tên và id,WebAPI Controller với hai GET hành động
tôi có các đường bay:
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: new { name = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
và những hành động trong bộ điều khiển:
[HttpGet]
public CompanyModel CompanyId(Guid id)
{
//Do something
}
[HttpGet]
public CompanyModel CompanyName(string name)
{
//Do something
}
trong khi một cuộc gọi như thế này: http://localhost:51119/api/companies/CompanyId/3cd97fbc-524e-47cd-836c-d709e94c5e1e
công trình và được cho là phương pháp 'CompanyId',
một cuộc gọi tương tự như http://localhost:51119/api/companies/CompanyName/something
được tôi để 404 không tìm thấy
nhưng điều này: 'http://localhost:51119/api/companies/CompanyName/?name=something
' hoạt động tốt
bất cứ ai có thể giải thích hành vi này và những gì tôi làm sai?
Tôi chấp nhận câu trả lời của bạn vì nó hoạt động tốt, nhưng tôi vẫn không hiểu tại sao nó không được ánh xạ với hành động đúng, trong URI tôi trực tiếp là một lần để 'CompanyName' và một lần để 'CompanyId', should't nó chọn hành động thích hợp? –
[Câu hỏi SO này] (http://stackoverflow.com/questions/9569270/custom-method-names-in-asp-net-web-api) có thể giúp giải thích lý do. Theo mặc định, các tuyến API Web tuân theo các quy ước REST. Vì vậy, bạn có thể thấy hành vi khác nhau với các tuyến đường MVC thông thường. –
Brilliant! Web API cũng chỉ được nghĩ ra! –