Có thể nhận OData để thực hiện những điều sau không? Tôi muốn có thể truy vấn một cuộc gọi REST bằng cách truyền các tham số hơn có thể không phải là khóa chính. Tôi có thể gọi phương thức REST như ->GetReports(22, 2014)
hoặc Reports(22, 2014)
không?API Web và OData- Vượt qua nhiều thông số
[HttpGet]
[ODataRoute("Reports(Id={Id}, Year={Year})")]
public IHttpActionResult GetReports([FromODataUri]int Id, [FromODataUri]int Year)
{
return Ok(_reportsRepository.GetReports(Id, Year));
}
Đây là sự thay đổi mới nhất của tôi.
//Unbound Action OData v3
var action = builder.Action("ListReports");
action.Parameter<int>("key");
action.Parameter<int>("year");
action.ReturnsCollectionFromEntitySet<Report>("Reports");
phương pháp của tôi cho điều khiển ReportsController
[HttpPost]
[EnableQuery]
public IHttpActionResult ListReports([FromODataUri] int key, ODataActionParameters parameters)
{
if (!ModelState.IsValid)
{
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
int year = (int)parameters["year"];
return Ok(_reportsRepository.GetReports(key, year).Single());
}
tôi đã cố gắng gọi url như:
http://localhost:6064/odata/Reports(key=5,year=2014)/ListReports
Không tài nguyên HTTP đã được tìm thấy phù hợp với yêu cầu URI 'http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'
.`
Làm thế nào điều này có thể được thực hiện với Odatav3? v3 không có chức năng. – Keith
Tôi phải sử dụng Odata v3 vì tôi đang sử dụng Jaydata và nó chỉ hoạt động với v3. Nếu tôi sử dụng Jaydata với Odata v4 nó sẽ gây ra lỗi 404. Bất kỳ giải pháp với v3? Cảm ơn – Keith
Với v3, bạn có thể xác định một hành động. Nếu bạn định nghĩa một hành động không ràng buộc, bạn phải sử dụng HttpPost và chuyển các tham số thông qua phần thân yêu cầu, và bạn cần thêm một phương thức "HandleUnmappedRequest" trong bộ điều khiển để khớp với yêu cầu hành động không liên kết. Nếu bạn định nghĩa nó như là một hành động bị ràng buộc ràng buộc với thực thể thiết lập mặc dù điều này không có ý nghĩa, bạn có thể thêm một phương thức "[ActionName] OnCollectioinOf [EntityTypeName]" và gọi HttpPost "~/[EntitySetName]/[ActionName]", và chuyển các tham số trong phần thân yêu cầu. –