我正在调整一个开源项目(NopCommerce)。它是一款出色的软件,支持使用插件进行扩展。 对于一个插件,我想向视图添加信息,为此,我想从Controller继承并覆盖我需要更改的操作。 所以这是我的控制器:
public class MyController : OldController{
//stuff
public new ActionResult Product(int productId)
{
//Somestuff
}
}
我从我的插件更改了路径,但是当调用此操作时,我收到以下错误:
当前的行动请求'产品'在控制器类型上 ' myController的'以下操作方法之间不明确: My.plugin类型的System.Web.Mvc.ActionResult Product(Int32) 类型为OldController的System.Web.Mvc.ActionResult Product(Int32)
有什么办法可以覆盖这个方法吗? (ps:我不能使用override关键字,因为它在OldController中没有标记为虚拟,抽象或覆盖)
感谢, 奥斯卡
答案 0 :(得分:6)
如果OldController的方法很少,请像这样Redeclare。
public class MyController : Controller
{
private OldController old = new OldController();
// OldController method we want to "override"
public ActionResult Product(int productid)
{
...
return View(...);
}
// Other OldController method for which we want the "inherited" behavior
public ActionResult Method1(...)
{
return old.Method1(...);
}
}
答案 1 :(得分:0)
当然,在控制器上“按 F12”并查看标记为虚拟的项目
public override void OnActionExecuting(ActionExecutingContext context)
{
if (Request.Headers.TryGetValue("myHeader", out var value))
{
HashId = hashid.ToString();
}
base.OnActionExecuting(context);
}