无法覆盖ApiController方法

本文关键字:方法 ApiController 覆盖 | 更新日期: 2024-09-19 21:33:21

我有一个基本的API控制器,这里有一个片段:

public abstract class CrudController<TDto, TAdd, TEdit, TLookup> : BaseApiController
        where TDto : BaseDto, new()
        where TAdd : BaseModel
        where TEdit : BaseModel
        where TLookup : BaseModel
    {
        [NonAction] 
        protected virtual Expression<Func<TDto, bool>> CreateWhere(Guid? id)
        {
            return dto => true;
        }
        [HttpGet]
        public virtual DataSet<TLookup> Query([FromUri] DtoQuery query, Guid? id = null)
        {           
            DataSet<TDto> data = DataService.Query(query, CreateWhere(id));
            return new DataSet<TLookup>(data.Records.Map<TLookup>(), data.Total);
        }
     }

我从这个ApiController类继承,然后想覆盖派生类中的一个方法:

public class ProductCategoryController : CrudController<ProductSubcategoryDto, ProductSubcategoryModel, ProductSubcategoryModel, ProductSubcategoryModel>
{
    protected override Expression<Func<ProductSubcategoryDto, bool>> CreateWhere(Guid? id)
    {
        return dto => dto.ProductCategoryGuid == id;
    }
}

但是派生类中的方法没有被执行。

是否获取api/productcategorycontroller/query?queryetctectec是从视图中调用的。

数据集<>()在基类上执行。

然后,我逐步完成代码,该方法的第一行调用CreateWhere(),F11向上走了几行,而不是到达派生类中的重写方法。

BaseApiController只是一个从ApiControl派生的空类。

无法覆盖ApiController方法

事实证明,我使用了错误的ApiController,而且它一直在工作。