未经授权的请求不会使用returnUrl查询字符串参数重定向到登录页面

时间:2010-12-18 15:04:32

标签: asp.net-mvc authorization returnurl

设置

在我的MVC3应用程序中,MembersController使用[Authorize]属性进行修饰。

MembersController有一个名为MyPage的Action。由于控制器上的Authorize属性,MyPage只能由授权用户请求。

问题

当未经授权的用户尝试请求/ Members / MyPage时,他们会被正确地重定向到登录页面。

但是,ReturnUrl参数不会传递到登录页面,因此当用户进行身份验证时,它们将被带到默认页面(我们称之为/ Members / Home),而不是/ Members / MyPage。

问题

为什么?!

在MVC2中开发的另一个应用程序中,returnUrl QS参数存在并按预期工作。

其他问题:

在装饰控制器和操作时,将忽略Autorize属性。

分辨率:

在.NET 3.5和.NET 4之间没有正确更新web.config的部分。请参阅下面的答案。

2 个答案:

答案 0 :(得分:3)

@Marcind让我走上正轨,@ Darin Dimitrov的回答对这个过程非常有启发性。

诊断

似乎这个问题与web.config有关,当我将现有的Web Forms .NET 3.5应用程序合并到.NET 4.0应用程序时,我没有正确更新。我不记得我是怎么做到的。

无论如何,通过将我的应用程序的web.config与新的MVC 3 web.config进行比较,我能够找到不应该存在的额外位,从3.5天开始遗留下来。

分辨率:

通过更正< authentication>< forms>中的位来解决该问题。 web.config中的标记,以及< membership>标签

由此引起的其他问题:

由此引起的另一个问题是,如果我使用Authorize属性修饰控制器,它会被忽略,因此控制器尝试根据当前用户处理信息,显然是null,因此各种异常都是烧成。

答案 1 :(得分:1)

它对我有用。我使用ASP.NET MVC 3 RC2创建了一个新项目,默认模板,添加了一个MembersController,用[Authorize]属性装饰它,运行应用程序,请求/members/index,重定向到{{1}登录时,已重定向到/Account/LogOn?ReturnUrl=%2fmembers%2findex。您的代码必定存在其他问题。

以下是它的工作原理:

  • /members/index属性检查用户是否经过身份验证,如果不是,则返回401状态代码。
  • 作为ASP.NET的一部分并处理表单身份验证的FormsAuthenticationModule拦截401状态代码,并通过将ReturnUrl参数附加到指向初始请求的请求来重定向到登录页面。

[Authorize]模块并非特定于ASP.NET MVC,这是标准的ASP.NET内容