在ASP.NET MVC应用程序中使用自定义依赖注入容器(在本例中为Unity)时,是否可以在调用GetControllerInstance
之前拦截请求以确定是否已发生表单身份验证超时?< / p>
我在web.config
中有以下内容:
<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="10" defaultUrl="~/Home/Index"/>
</authentication>
如果我登录网站,等待超时发生,然后访问另一个页面(好吧,控制器操作),我原本希望框架能够自动将我重定向到~/Home/Index
。相反,它很乐意尝试创建新的控制器来处理失败的请求,最后我被重定向到我们的自定义错误页面。
查看callstack,我认为这需要在MvcHandler.System.Web.IHttpHandler.ProcessRequest
或MvcHandler.ProcessRequest
附近发生..当然在调用DefaultControllerFactory.CreateController
之前。
有没有其他人必须处理这种情况?
更新:说实话,我认为这种方法可能不正确,更好的办法是在主页上使用一些javascript在客户端处理表单身份验证超时。然后,我可以重定向到一个清除会话并将其返回到类似于what is described here的登录页面的操作。
答案 0 :(得分:0)
您可以编写一个包含统一控制器工厂的控制器工厂(有关示例,请参阅我的委托装饰器http://haacked.com/archive/2008/06/18/delegating-decorators.aspx的帖子)。
然后在您的控制器工厂中,您可以覆盖GetControllerInstance并使用您的前后代码将委托的调用包装到GetControllerInstance。
这有意义吗?