2011-06-19 36 views
29

我只是在看我的一些旧的代码,我有一个动作过滤器(OnActionExecuting法)为什么要调用base.OnActionExecuting(filterContext);?

,并在它结束时,我有

base.OnActionExecuting(filterContext); 

为什么摸索我看到不少倍。我也看到,在我旧的授权标签中,我称之为基础。

我应该总是在调用基础方法后?

回答

50

我应该总是在调用基本方法后?

这将取决于具体情况。

例如在授权过滤器(从AuthorizeAttribute派生),如果您调用基本方法,那么将执行内置于ASP.NET MVC中的所有现有授权逻辑。如果你不叫它,只会应用你的授权逻辑。

至于其他的标准动作过滤器所有有关OnActionExecutingOnActionExecutedOnResultExecutingOnResultExecuted被定义为虚拟的,但他们的身体是空的,所以它没有任何区别,如果你打电话或没有(从ActionFilterAttribute派生)基本方法。

1

我相信,如果您让Visual Studio自动生成重写方法,方法是键入override并在智能感知中选择一种方法,然后按Tab键,Visual Studio会自动在方法主体中添加base.MethodName()

如果您不需要它,请将其删除。我在创建我的ActionFilter时一直将其删除,并且还没有问题。唯一的时候你不应该删除它是当你需要基础方法被调用。

+1

我想问题是你怎么知道你什么时候需要打电话给基地。我真的不知道说一个base.OnActionExecuted()的默认行为。 – chobo2

+1

@ chobo2:看起来Darin Dimitrov回答了上述问题(涉及ActionFilter方法的默认行为),并且您可以将他的(更完整的)答案标记为接受。 – xTRUMANx

相关问题