从泛型控制器重写单个方法

本文关键字:单个 方法 重写 控制器 泛型 | 更新日期: 2023-09-27 18:32:34

我有一个抽象类

public abstract class BaseController<T,K> : ApiController
{
  //several methods
  [Route("{id:int}")]
  public HttpResponseMessage Put(int id, [FromBody]T item)
  {
    //updates the item
  }
}

我还有其他 6 个类(控制器)继承了 BaseController 并使用那里声明的方法。我需要覆盖用户控制器上的put方法,并且仅在用户控制器上。我试过:

public abstract class BaseController<T,K> : ApiController
{
  //several methods
  [Route("{id:int}")]
  public virtual HttpResponseMessage Put(int id, [FromBody]T item)
  {
    //updates the item
  }
}
public class UserController : BaseController<User, UserDT>
{
  [Route("{id:int}")]
  public override HttpResponseMessage Put(int id, [FromBody]User item)
  {
    //updates the user
  } 
}

但它抛出错误:Multiple actions were found that match the request

如何覆盖该方法?

---编辑----这是我的WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

---编辑---添加了[Route("{id:int}")]

从泛型控制器重写单个方法

从覆盖中删除 Route 属性。 即基于 id:int 路由和主体的数据类型生成 2 个相同的路由。 由于多态性,重写仍将代替基方法执行。