Tôi có một vài lớpthừa kế Web API điều khiển API
Square : Rectangle : Shape (abstract)
và tôi có một bộ điều khiển cơ sở kế thừa từ ApiController mà tôi muốn sử dụng.
public abstract class BaseController<T> : ApiController where T : class
{
public abstract IEnumerable<T> Get()
...
}
và
public class DerivedController : BaseController<Rectangle>
{
public override IEnumerable<Rectangle> Get()
...
}
public class AnotherDerivedController : BaseController<Square>
{
public new IEnumerable<Square> Get()
...
}
/api/hình chữ nhật sẽ gọi đúng IEnumerable<Rectangle> Get()
/api/vuông sẽ cho tôi một lỗi:
Multiple actions were found that match the request:
System.Linq.IEnumerable`1[Square] Get() on type Web.Api.Controllers.AnotherDerivedController
System.Linq.IEnumerable`1[Rectangle] Get() on type Web.Api.Controllers.DerivedController
Nếu tôi thay đổi public new IEnumerable<Square> Get()
để public override IEnumerable<Square> Get()
, Tôi nhận được một lỗi thời gian biên dịch kể từ khi retur n chữ ký khác nhau
Làm cách nào để mã của tôi gọi đúng phương pháp? Có cần đăng ký một cách rõ ràng các phương thức của mỗi lớp trong RegisterRout không?
Xin chào Aliostad, tôi đã cập nhật câu hỏi của mình để phản ánh thay đổi của bạn. Tôi vẫn nhận được một số vấn đề ở đây, nhưng đề xuất của bạn là hữu ích cho tôi. Cảm ơn. – khaihon