簡體   English   中英

如何覆蓋 mvc 控制器中的動作?

[英]How to override an action in mvc controller?

如何覆蓋控制器中的操作方法? 任何人都可以用一個小例子來解釋。 還有一件事要問,我們可以在沒有 virtual 關鍵字的情況下做到這一點嗎?

就我理解你的問題而言,這些是答案:

第一個答案:

不可能有兩個具有相同名稱但結果不同的控制器操作:

例如:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM