我有一个抽象类
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并使用声明的方法的其他类(控制器)。我需要覆盖UserController上的put
方法,并且只在UserController上。
我试过了:
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
如何覆盖方法?
--- ---- EDIT 这是我的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 }
);
}
}
--- --- EDIT
添加了[Route("{id:int}")]
答案 0 :(得分:1)
取消覆盖的Route属性。这是基于id:int路由和正文的数据类型生成2个相同的路由。由于多态性,仍将执行覆盖以代替基本方法。