我有一个网页errors.aspx,需要保护其免受直接访问 我希望只有在被另一个网页重定向时才能访问它。
我该怎么做?
答案 0 :(得分:1)
如果您使用Server.Transfer重定向到新页面,那么您可以在Context集合中传递一个变量并在新页面中检查它。
第1页
Context.Items.Add("somevar","someval");
第2页
if ( Context.Items["somevar"] == null )
{
// the page is not redirected from Page 1
}
答案 1 :(得分:0)
在会话中保留一些布尔值,如果未设置该值,则从错误页面抛出异常。在重定向之前设置上一页中的值,就是它
答案 2 :(得分:0)
您可以将redirectMode="ResponseRewrite"
添加到web.config中的customErrors
标记。这使得错误重定向类似于Server.Transfer
而不是Response.Redirect
。因此,如果它们位于 SomePage.aspx 并且发生错误而不是更改为 MyErrorPage.aspx 的网址,那么它将保持为 SomePage.aspx 但会从 MyErrorPage.aspx 呈现HTML。在您的 MyErrorPage.aspx 代码后面,您可以查看Request.Path
,如果它是 MyErrorPage.aspx ,则表示有人试图直接访问错误页面。在这种情况下,您可以执行Response.End
或此时可能要执行的任何其他操作,以防止直接访问此页面。
答案 3 :(得分: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>