2014-03-06 117 views
5

我有一个在RegisterGlobalFilters()中注册的自定义IAuthenticationFilter实现。在我的项目中,我目睹了以下调用序列:IAuthenticationFilter.OnAuthenticationChallenge()的用途是什么

  1. IAuthenticationFilter.OnAuthentication
  2. 授权(如果有的话)
  3. 控制器动作
  4. IAuthenticationFilter.OnAuthenticationChallenge

它为什么会发生控制器的动作?从this blog post我读

要记住的是,OnAuthenticationChallenge不 所有其他行动过滤器之前一定运行最关键的事情。它可以在 的各个阶段运行。

如果我们无法确定它何时被调用,它有什么用处?

+0

您提到的博客文章还说:“OnAuthenticationChallenge方法在OnAuthentication方法后运行,您可以使用OnAuthenticationChallenge方法对请求执行其他任务。”基本上,如果你想修改你的Action结果,你可以在“OnAuthenticationChallenge”方法上实现它。 – DmitryK

回答

7

Source

“的OnAuthenticationChallange方法由每当请求已失败的认证或授权策略用于操作方法的MVC框架调用。该OnAuthenticationChallenge方法传递的AuthenticationChallengeContext对象,其从ControllerContext类派生“

所以,一个实际的例子是:

1 - 您可以设置自定义过滤器授权

2 - 用户在授权方法上失败

3 - OnAuthenticationChallenge方法被调用。

+8

OnAuthenticationChallenge被调用来做什么? – BigTundra

+0

@BigTundra - 例如将用户重定向到登录页面 – Laserson