2010-06-23 100 views
1

当试图访问我的网站:表单身份验证和IIS7(&MVC):为什么ReturnUrl = /被添加?

www.X.com

浏览器的URL改变了到:

www.X.com/

的问题是,结果网址是:

www.X.com/HomePage.aspx?ReturnUrl=/

(HomePage.aspx是默认页)

在IE:www.X.com/HomePage.aspx?ReturnUrl=%2f

出于某种原因,窗体身份验证治疗/作为一个页面,用户试图访问,然后得到重定向到:首页.aspx?ReturnUrl =/

如何设置窗体身份验证(或MVC路由)不要视为/作为一个页面,所以当访问www.X.com它不会改变网址?

该网站在Windows Server 2008上运行IIS7,.NET 4

(当IIS6运行它没有这个问题)

Web.config文件:

<authentication mode="Forms"> 
      <forms name=".AUTHCOOKIE" loginUrl="HomePage.aspx" defaultUrl="Loading.aspx" timeout="9480" /> 
    </authentication> 

MVC路由(不知道它的相关):

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.ascx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.ashx/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.gif/{*pathInfo}"); 

     routes.MapRoute("Actions", "A/{controller}/{action}", new { controller = "Tasks", action = "InitPage" }); 

    } 

感谢

拉斐尔

回答

0

其实,当您访问http://www.x.com,您请求http://www.x.com/。当您在IIS/.Net中重定向到验证表单时,RedirectTo =始终附加在URL的末尾,以便服务器知道您的请求被拦截之前要到哪里去。

或换句话说:一切都按预期工作。你想要做什么?

如果有帮助,我看到两件事情“怪异”与你包括代码:

  • 登录页面被称为HomePage.aspx。这是...不寻常的(使用这个名字,HomePage.aspx应该是你登录后的页面,而不是登录页面)。此外,你提到MVC,但这不是一个MVC路线。
  • Global.asax中的唯一路由以“A /”开头,因此http://www.x.com/不会被它捕获。如果您的起始页面必须为http://www.x.com/A/Tasks/InitPage,请将路由参数{whatever}设为A,并为其分配一个默认值,或创建另一个捕获“/”请求的MapRoute,并重定向到正确的路径。可能将一个Default.aspx添加到项目中可能会起作用,但它会非常不合MVC。
+0

这是我想要的:当访问www.X.com访问Homepage.aspx但没有任何URL更改(甚至没有www.X.com/HomePage.aspx - 它在IIS 6上工作)。取而代之的是IIS7它重定向到www.X.com/HomePage.aspx?ReturnUrl=/。这是与表单身份验证和IIS7有关我不知道我需要改变。 – SirMoreno 2010-06-23 11:48:28

+0

啊!然后很简单(我认为)。只是将Homepage.aspx配置为http://www.X.com返回的默认页面(在IIS中,您只有default.aspx,index.html和一些变体)。正因为如此,“http://www.X.com/”!=“http://www.X.com/HomePage.aspx”,你会得到RedirectTo参数。 – salgiza 2010-06-23 12:03:06

+0

Homepage.aspx被设置为默认页面(这就是为什么它在IIS6上工作) – SirMoreno 2010-06-23 12:13:49

3

第一步: 您可以设置网络配置文件如下:

<authentication mode="Forms"> 
    <forms name=".AUTHCOOKIE" loginUrl="/" defaultUrl="Loading.aspx" timeout="9480" /> 
</authentication> 

第2步: 是否适用 “加载的aspx” 你的web服务器(IIS),默认文档设置

+0

这解决了我在IIS 7.5上的问题,本页面上的其他建议并没有解决问题。 – 2011-09-29 16:46:30

2

添加到全局asax。我有类似的问题,这似乎解决了它。

Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest 
    If (Request.AppRelativeCurrentExecutionFilePath.ToLower = "~/".ToLower) Then 
     HttpContext.Current.RewritePath("/Index.aspx") 
    End If 
End Sub 

还要确保路径= “/” 在您的验证码不存在 块

<authentication mode="Forms"> 
     <forms name=".ASPXAUTH" loginUrl="Index.aspx" defaultUrl="default.aspx" timeout="60"/> 
    </authentication> 

*注。您可以vb.net转换到这里http://www.developerfusion.com/tools/convert/vb-to-csharp/

2

C#访问权限添加到您的登录页面,例如:

<location path="Login.aspx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 

和窗体标签:

<forms name="SecurityAuthentication" path="/" loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" timeout="60" /> 
0

某处login.aspx.cs放以下声明:

if (Request.QueryString["ReturnUrl"] != null && Request.QueryString["ReturnUrl"] != "/") 
    { 
     Response.Redirect(Request.QueryString["ReturnUrl"]); 
    } 

T他最重要的部分是这样的条件:

Request.QueryString["ReturnUrl"] != "/" 
+0

这将有助于解释为什么这会起作用。 – 2015-11-06 21:58:00

+0

如果我们调试代码,'ReturnUrl =%2f'实际上意味着'ReturnUrl = /'。它很难重定向到“/”;所以我们只是忽略。有用。对于任何其他'ReturnUrl',我们通过执行'Response.Redirect'重定向到那个URL。 – Hiraeth 2015-11-09 19:06:01

0

就我而言,我有我的应用程序池“托管管道模式”切换从“一体化”回到“经典”。