2010-06-23 34 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

就我而言,我有我的應用程序池「託管管道模式」切換從「一體化」回到「經典」。

相關問題