2010-03-11 117 views
1

我有一個網頁errors.aspx,需要保護,以免直接訪問。
我希望只有在被另一個網頁重定向時才能訪問它。Asp.net拒絕直接訪問網頁

我該怎麼辦?

+0

是使用'Server.Transfer'或'Response.Redirect'重定向? – rahul 2010-03-11 13:34:44

+0

ronik 2010-03-11 13:49:15

回答

0

在會話中保留一些布爾值,如果未設置該值,則會從錯誤頁面拋出異常。在重定向之前設置前一頁中的值,就是這樣

+0

但是,當用戶試圖在新標籤中打開頁面時,這將失敗。 – rahul 2010-03-11 13:34:10

+0

正是他想要做的,他不希望用戶直接打開它。你是對的,我認爲你建議的方式更好,但在這種情況下,他應該拋出異常或其他東西,如果變量不存在 – 2010-03-11 13:39:13

+0

但我無法在所有情況下設置此值,errors.aspx頁面被用於,並被所有類型的例外重定向。 因此,如果有例外,則無法設置該值。 – ronik 2010-03-11 13:40:56

1

如果使用Server.Transfer重定向到新頁面,則可以在Context集合中傳遞一個變量並在新頁面中檢查該變量。

Context.Items.Add("somevar","someval"); 

第2頁

if (Context.Items["somevar"] == null) 
{ 
    // the page is not redirected from Page 1 
} 
+0

頁面beeing重定向customErrors – ronik 2010-03-11 13:50:46

0

你可以在web.config中添加redirectMode="ResponseRewrite"customErrors標籤。這使得錯誤重定向像Server.Transfer而不是Response.Redirect。所以,如果他們是在SomePage.aspx頁面併發生錯誤,而不是URL更改爲MyErrorPage.aspx將繼續擔任SomePage.aspx頁面,但會呈現來自MyErrorPage.aspx的HTML。在您的代碼後面,您可以檢查Request.Path,如果它是MyErrorPage.aspx這意味着某人正試圖直接訪問錯誤頁面。在這種情況下,您可以執行Response.End或其他任何您可能想要在此處執行的操作,以防止直接訪問此頁面。

+0

這聽起來不錯,我會嘗試它 – ronik 2010-03-11 14:39:56

0

插入流入WebConfig

<system.web> 
    <httpHandlers> 
    <remove verb="*" path="*.aspx" /> 
    <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler" /> 
    </httpHandlers> 
</system.web> 

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
    <add name="BlockViewHandler" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
</system.webServer>