未经授权的请求不会重定向到使用returnurl查询字符串参数登录页面
-
11-10-2019 - |
题
设置
在我的MVC3应用程序中,会员controller装饰有[授权]属性。
会员controller有一个名为mypage的动作。由于控制器上的授权属性,只有授权用户才能要求mypage。
问题
当未经授权的用户试图请求 /成员 /mypage时,他们将正确地重定向到登录页面。
但是,返回参数未传递到登录页面中,因此,当用户身份验证时,将其带到默认页面(我们称其为 /成员 /home),而不是 /成员 /mypage。
问题
为什么?!
在MVC2中开发的另一个应用程序中,ReTurnUrl QS参数在那里并按预期工作。
其他问题:
装饰控制器和动作时,自动化属性被忽略。
解析度:
Web.config的部分未正确更新.NET 3.5和.NET 4.请参见下面的答案。
解决方案
@marcind使我走上正确的轨道,@darin dimitrov的答案非常有启发性。
诊断
该问题似乎与Web.config有关,我在合并现有Web Forms .NET 3.5 App与.NET 4.0应用程序时无法正确更新。我不记得我怎么了。
无论如何,通过将我的应用程序的Web.config与新的MVC 3 web.config进行比较,我能够找到3.5天的额外位置。
解析度:
该问题是通过纠正位置而解决的u003Cauthentication>u003Cforms>在web.config中标记u003Cmembership>标签。
由此引起的其他问题:
由此引起的另一个问题是,如果我用授权属性装饰了一个控制器,则被忽略了,因此控制器试图根据当前用户处理信息,显然是无效的,因此触发了各种例外。
其他提示
这个对我有用。我使用ASP.NET MVC 3 RC2创建了一个新项目,默认模板添加了一个成员controller,并将其装饰 [Authorize]
属性,运行应用程序,请求 /members/index
, ,被重定向到 /Account/LogOn?ReturnUrl=%2fmembers%2findex
, ,登录,被重定向到 /members/index
. 。您的代码还必须有其他问题。
以下是它的工作方式:
- 这
[Authorize]
属性检查用户是否经过身份验证,如果不是,则返回401状态代码。 - 这 formauthenticationModule 这是ASP.NET和处理表单身份验证的一部分,通过将returnurl参数附加到指向初始请求的请求中,将401状态代码和重定向到登录页面。
这 FormsAuthenticationModule
模块不是特定于ASP.NET MVC,这是标准的ASP.NET东西