潜在的WebApi Bug覆盖路由会创建多个端点

时间:2016-07-26 21:22:11

标签: c# model-view-controller asp.net-web-api controller routes

我想我发现了一个webapi错误。

这是我有这个控制器的问题的简化版本,其路由获取列表假设链接到employeeId

[RoutePrefix("/divisions/{parentId}/employees/{employeeId}/dependent")]
public class EmployeeDependentController : ParentBasedListController<EmployeeDependentDTO, GlobalEntityKey<IEmployee>>
{
    [HttpGet]
    [ReadRoute("")]
    public override EmployeeDependentDTO[] GetList(GlobalEntityKey<IEmployee> employeeId, bool keysOnly = false)
    {
        return base.GetList(employeeId, keysOnly);
    }

    protected override EmployeeDependentDTO[] GetListImp(GlobalEntityKey<IEmployee> employeeKey)
    {
        return GlobalFactory<IEmployeeDependentService>.Instance.GetList(employeeKey);
    }
}

然而,它继承自基类,其参数名称通常链接到parentId

 public abstract class ParentBasedListController<TEntityDTOHeader, TEntityDTOKey, TParentEntityKey> : ApiController
    where TParentEntityKey : IKey
    where TEntityDTOHeader : TEntityDTOKey
{
    #region Public Methods

    [HttpGet]
    [ReadRoute("")]
    public virtual TEntityDTOKey[] GetList(TParentEntityKey parentId, bool keysOnly = false)
    {
        if (false == keysOnly)
        {
            return this.GetListImp(parentId).Cast<TEntityDTOKey>().ToArray();
        }
        return this.GetKeyListImp(parentId);
    }

    #endregion

    #region Protected Methods

    protected abstract TEntityDTOHeader[] GetListImp(TParentEntityKey parentKey);

    #endregion
}

当我覆盖get list方法时,webapi会为重复的匹配操作返回错误。更有趣的是,我尝试使用new关键字,在我收到此错误的情况下应该隐藏该方法。

为什么会这样?这是webapi中的一个错误吗?我知道他们正在使用控件的反射,但他们应该能够确定是否覆盖了一个方法并使用了正确的方法。

我有几个控制器绑定到这个路由,并且有几个控制器继承了这个基类,这两个控件都很容易改变,最好的解决方法是什么?

0 个答案:

没有答案