2010-04-21 116 views
2

我試圖保證我的整個MVC網站,所以在家庭控制器之前,我添加了[授權]屬性。MVC的ReturnUrl = Default.aspx?

現在,如果你從Visual Studio運行或使用根網址導航(例如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的?

回答

2

當存在ReturnUrl參數時,ASP.NET(確切地說,FormsAuthentication.RedirectFromLoginPage)始終忽略web.config中的defaultUrl設置。只有當您直接進入登錄頁面而沒有通過任何ReturnUrl參數時,它纔會受到尊重。

ASP.NET MVC項目模板提供了一個空白Default.aspx模板來處理一樣,在IIS經典管道模式的請求。你應該沒問題。

+0

嗯..想我不能正確問我的問題。我想我真正的問題是,我怎麼能得到它將ReturnUrl設置爲Home/Index而不是default.aspx?也就是說,當用戶導航到根URL時,不是特定的路線。 (如果該人正在導航到特定路線,ReturnUrl是正確的。) – Cynthia 2010-04-21 17:55:37

+0

@Cynthia:我明白了你的觀點。問題是,實際上,當您請求「/」時,Web服務器會嘗試提供默認文檔。 ASP.NET MVC *附帶的默認模板透明地*將請求重寫爲「default.aspx」到服務器*上的「/」route *並嘗試執行操作,但由於它需要身份驗證,它會將用戶重定向到登錄頁面使用當前URL作爲返回URL(仍然是'default.aspx')。實際上,你得到你想要的東西(除了在地址欄中顯示'default.aspx'外)。集成模式下的問題會更少。 – 2010-04-21 18:03:41

+0

好的,我試了一下,Default.aspx確實去了默認的控制器/操作。所以..沒關係!我認爲它會炸彈,但顯然不是。謝謝! – Cynthia 2010-04-21 18:06:05