从泛型控制器重写单个方法
本文关键字:单个 方法 重写 控制器 泛型 | 更新日期: 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 个相同的路由。 由于多态性,重写仍将代替基方法执行。