【问题标题】:ReturnUrl = Default.aspx for MVC?ReturnUrl = MVC 的 Default.aspx?
【发布时间】:2011-02-10 17:35:36
【问题描述】:

我正在尝试保护我的整个 MVC 站点,因此在 Home 控制器之前,我添加了一个 [Authorize] 属性。

现在,如果您从 Visual Studio 运行它或使用根 URL(例如 http://localhost:2897)导航,它会按预期重定向到登录页面。但是重定向后地址栏中的 URL 是这样的:http://localhost:2897/Account/LogOn?ReturnUrl=%2fdefault.aspx%3f

我没有对此进行测试,因为我还没有实现我的身份验证代码。但是,这对我来说似乎是个大问题,因为我的项目中没有 default.aspx!

我在 web.config 中的身份验证标签如下所示:

<authentication mode="Forms">
   <forms loginUrl="~/Account/LogOn" defaultUrl="~/Home/Index" timeout="2880"/>
</authentication>

为什么不选择这条路由作为默认的 ReturnUrl 而不是 default.aspx?

【问题讨论】:

    标签: asp.net-mvc authentication returnurl


    【解决方案1】:

    当存在ReturnUrl 参数时,ASP.NET(准确地说是FormsAuthentication.RedirectFromLoginPage)总是忽略web.config 中的defaultUrl 设置。只有当您直接进入登录页面而不传递任何ReturnUrl 参数时,它才会被尊重。

    ASP.NET MVC 项目模板提供了一个空白的Default.aspx 模板来处理类似 IIS 经典管道模式下的请求。你应该没问题。

    【讨论】:

    • 嗯 .. 猜我没有正确地问我的问题。我想我真正的问题是,我怎样才能将 ReturnUrl 设置为 Home/Index 而不是 default.aspx?也就是说,当此人导航到根 URL 时,而不是特定路线。 (如果该人正在导航到特定路线,则 ReturnUrl 是正确的。)
    • @Cynthia:我明白你的意思。问题是,事实上,当您请求“/”时,Web 服务器会尝试提供默认文档。 ASP.NET MVC 附带的默认模板透明地将“default.aspx”请求重写为“/”路由在服务器上并尝试执行该操作,但因为它需要身份验证,它将使用当前 URL 作为返回 URL(仍然是 default.aspx)将用户重定向到登录页面。实际上,你得到了你想要的(除了在地址栏中显示default.aspx)。在集成模式下您会遇到更少的问题。
    • 好的,我试过了,Default.aspx 确实转到了默认的控制器/操作。所以..没关系!我以为它会爆炸,但显然不会。谢谢!
    • 如果你对此很着迷(地址栏中没有出现default.aspx),你应该将“/”路由显式映射到一个单独的操作方法,将人们重定向到“Home/ Index" 无需授权(使用return Redirect(...) 并在默认调用之前添加MapRoute 调用以处理"/" 请求)并使用[Authorize] 保护"Home/Index"。
    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2013-03-03
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多