簡體   English   中英

自定義 ASP.NET MVC ActionFilterAttribute - 永遠不會調用掛鈎

[英]Custom ASP.NET MVC ActionFilterAttribute - hooks never get called

嗨,我正在嘗試做一些看起來很容易的事情,並且以這種方式記錄在案,但由於某種原因,它並不那么容易。

基本上我寫了這樣的東西:

public class CacheControllAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    { 
        //do something
        base.OnResultExecuting(filterContext);
    }
}

但是,當我嘗試在這樣的操作結果上使用它時:

[CacheControllAttribute]
public ActionResult SomeAction()
{
    //whatever
}

我的自定義覆蓋 function 永遠不會被調用...

對此有什么想法嗎? 或者如何以不同的方式實現這一點?

一個可能很愚蠢的建議,但您是否將其添加到您的global.asax中?
這是我的一個應用程序的示例:

public class MvcApplication : System.Web.HttpApplication     
{
  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
    filters.Add(new LogonAuthorize());
    filters.Add(new HandleErrorAttribute());
  }
}

我的錯誤是我引用了 System.Web.Http.Filters,而不是 System.Web.Mvc

終於弄清楚了,最終我一直將過濾器放在一個 function 上,實際上它是一個 ActionResult function,但它是由另一個調用它的方法返回的,所以過濾器只在入口點動作。

您是否嘗試過覆蓋OnActionExecuting ,例如:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
     base.OnActionExecuting(filterContext);
}

這是我編寫動作過濾器的方式,並且在調用它們時沒有遇到問題。

您的代碼對我來說通常看起來不錯。 它可能與您在 Action 方法中正在做什么(或不做什么)有關。 如果您沒有返回視圖等,則可能沒有調用您的“ResultExecuting”事件處理程序。 我會在此處獲取示例,並查看為您的操作記錄的內容。

如果您看到 class 'ActionFilterAttribute'的 inheritance 繼承了“ FilterAttributeIActionFilterIResultFilter ”類。 您正在尋找的方法在IResultFilter接口中可用。

因此,當我們使用自定義 class 作為屬性時,它永遠不會執行方法。 我們總是需要根據自定義實現覆蓋所有IActionFilterIResultFilter方法。

想法:

你確定你的過濾器沒有運行嗎? 你在里面設置了斷點嗎? 你確定它不是拋出和異常嗎? 你確定你裝飾的動作實際上是被調用的嗎?

不同的實現:

覆蓋OnResultExecuting的 OnResultExecuting 方法。

暫無
暫無

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

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