首页 新闻 搜索 专区 学院

Forms身份验证如何遇到401不跳转。

0
悬赏园豆:10 [已解决问题] 解决于 2012-12-30 21:31
 Forms身份验证中 普通的请求 GET之类的 ,当后台返回是401时会自动跳转到登陆页面。
那么我如果是ajax请求它也会给我跳转,我想问下 如何能让 ajax请求不自动跳转页面啊 。
直接返给给客户端401就行。 
rainrcn的主页 rainrcn | 初学一级 | 园豆:113
提问于:2012-12-25 09:27
< >
分享
最佳答案
0

貌似用默认的forms认证方式,验证不通过肯定会自动跳转的。要实现你的功能,需要研究一下forms认证方式是在哪里跳转的,想法子在跳转前面拦截掉然后使用你自己的响应方式,或者参考该模块,使用自己的认证模块,大部分使用forms认证模块实现,跳转的部分自己来做。

收获园豆:5
paseo | 菜鸟二级 |园豆:262 | 2012-12-26 22:00

嗯 这个问题我已解决了 。谢谢呵呵

rainrcn | 园豆:113 (初学一级) | 2012-12-30 21:31
其他回答(1)
0

Forms验证的重定向是必然发生的。

收获园豆:2
Launcher | 园豆:45045 (高人七级) | 2012-12-25 09:40

我现在就要阻止它发生 。我想能不能通过自己给他写跳转那块 还是能不能通过配置来不让他跳转。

支持(0) 反对(0) rainrcn | 园豆:113 (初学一级) | 2012-12-25 09:41

@Rainr: 我写了个不太好的实现,通过将 401 响应修改为 403 来禁止重定向,在你的所有 Controller 中重载 ExecuteCore 方法,如下:

protected override void ExecuteCore()
        {
            if (!base.ControllerContext.IsChildAction)
            {
                base.TempData.Load(base.ControllerContext, this.TempDataProvider);
            }

            try
            {
                string requiredString = this.RouteData.GetRequiredString("action");
                if (!this.ActionInvoker.InvokeAction(base.ControllerContext, requiredString))
                {
                    this.HandleUnknownAction(requiredString);
                }

                if (base.HttpContext.Response.StatusCode == 401)
                    base.HttpContext.Response.StatusCode = 403;
            }
            finally
            {
                if (!base.ControllerContext.IsChildAction)
                {
                    base.TempData.Save(base.ControllerContext, this.TempDataProvider);
                }
            }
        }

如果是 401 的话,请求处理器会自动重定向,目前我还没想到如何从请求处理器来修改的方法。上面的方法你可以临时使用。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-12-25 11:02

@Launcher: 这个问题我查了好久 好像还是没办法阻止它转发。 谢谢你的回答。 

支持(0) 反对(0) rainrcn | 园豆:113 (初学一级) | 2012-12-26 08:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册