[英]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 繼承了“ FilterAttribute
、 IActionFilter
、 IResultFilter
”類。 您正在尋找的方法在IResultFilter
接口中可用。
因此,當我們使用自定義 class 作為屬性時,它永遠不會執行方法。 我們總是需要根據自定義實現覆蓋所有IActionFilter
和IResultFilter
方法。
想法:
你確定你的過濾器沒有運行嗎? 你在里面設置了斷點嗎? 你確定它不是拋出和異常嗎? 你確定你裝飾的動作實際上是被調用的嗎?
不同的實現:
覆蓋OnResultExecuting
的 OnResultExecuting 方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.