kha*_*hon 8 c# asp.net-mvc-4 asp.net-web-api
我有几堂课
Square : Rectangle : Shape (abstract)
Run Code Online (Sandbox Code Playgroud)
我有一个继承自ApiController的基本控制器,我想使用它.
public abstract class BaseController<T> : ApiController where T : class
{
public abstract IEnumerable<T> Get()
...
}
Run Code Online (Sandbox Code Playgroud)
和
public class DerivedController : BaseController<Rectangle>
{
public override IEnumerable<Rectangle> Get()
...
}
public class AnotherDerivedController : BaseController<Square>
{
public new IEnumerable<Square> Get()
...
}
Run Code Online (Sandbox Code Playgroud)
/ api/rectangle将正确调用 IEnumerable<Rectangle> Get()
/ api/square会给我一个错误:
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
Run Code Online (Sandbox Code Playgroud)
如果我public new IEnumerable<Square> Get()
改为public override IEnumerable<Square> Get()
,我得到一个编译时错误,因为返回签名是不同的
如何让我的代码调用正确的方法?是否有必要在RegisterRoutes中显式注册每个类的方法?
您需要重写 Get,您基本上将其与new
. 这是行不通的,因为该类将有两个 Get 方法,而 Web API 将难以选择哪一个。
您可以定义BaseController
asabstract
和Get
as virtual
orabstract
然后在您的DerivedController
.
归档时间: |
|
查看次数: |
5093 次 |
最近记录: |