2010-03-11 105 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>