如何覆盖mvc控制器中的操作?

时间:2014-07-31 12:12:48

标签: c# asp.net-mvc asp.net-mvc-4

如何覆盖控制器中的操作方法?任何人都可以用一个小例子来解释。 还有一件事要问,我们可以在没有虚拟关键字的情况下做到这一点吗?

2 个答案:

答案 0 :(得分:1)

就我理解你的问题而言,这些是答案:

第一回答:

它不可能有两个具有相同名称但具有不同结果的控制器操作:

例如:

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
}

答案 1 :(得分:0)

您可以像在 mvc 解决方案中使用过滤器时过滤器将其挂钩的方式执行此操作

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