如何在mvc控制器中重写一个动作

本文关键字:一个 重写 mvc 控制器 | 更新日期: 2023-09-27 18:15:53

如何重写控制器中的动作方法?谁能举个例子解释一下?还有一件事要问,没有虚拟关键字我们能做到吗?

如何在mvc控制器中重写一个动作

就我对你问题的理解,以下是答案:

第一个答案

不可能有两个同名但结果不同的控制器动作:

例如:

ActionResult YourAction() { ... }
FileContentResult YourAction() { ... }

在MVC中你也可以这样做:

[HttpGet]
[ActionName("AnyAction")]
ActionResult YourAction(firstModel model1) { ... }
[HttpPost]
[ActionName("AnyAction")]
FileContentResult YourAction(secondModel model1) { ... }

这里的主要思想是,您可以使用ActionNameAttribute来命名几个具有相同名称的操作方法。

---------------------------------------------------------------- 或 --------------------------------------------------------------

第二个答案:

[NonAction]
public override ActionResult YourAction(FormCollection form)
{
  // do nothing or throw exception
}
[HttpPost]
public ActionResult YourAction(FormCollection form)
{
  // your implementation
}

你可以这样做,当你在mvc解决方案中使用过滤器时,过滤器将如何钩入它

public override void OnActionExecuting(ActionExecutingContext context)
{
   if (Request.Headers.TryGetValue("api-key", out var value))
   {
      ///
   }
   base.OnActionExecuting(context);
}