C# 如何拒绝对页面的直接访问

C# 如何拒绝对页面的直接访问,c#,asp.net,session,C#,Asp.net,Session,如何拒绝直接访问asp.net中的页面(通过键入完整url),而不使用web.config中的角色。 我用过: if (Session.IsNewSession) Response.Redirect("Default.aspx"); 问题是第一次一切正常,重定向正常,但是如果我在同一个浏览器中打开一个新选项卡并再次输入url,就会失败。 怎么解决呢?? thanx试试这个: 第1页 Context.Items.Add("somevar","someval"); 第2页

如何拒绝直接访问asp.net中的页面(通过键入完整url),而不使用web.config中的角色。 我用过:

if (Session.IsNewSession)
            Response.Redirect("Default.aspx");
问题是第一次一切正常,重定向正常,但是如果我在同一个浏览器中打开一个新选项卡并再次输入url,就会失败。 怎么解决呢?? thanx

试试这个:

第1页

Context.Items.Add("somevar","someval");
第2页

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

使用会话可以解决此问题

构建一个HttpModule,在context_BeginRequest中,您可以获得当前URL。稍后有条件地重定向到默认页面

public class RedirectionModule : IHttpModule
{
    void context_BeginRequest(object sender, EventArgs e)
    {

        //this user already already eligible to go inside page ? 
        if (Session["eligible-to-go-inside"] == null)
        {
        //new user
        //check current request url is default.aspx
        //if not forward to  default page
        }

    }
}
在default.aspx页面中,如果用户完全满足进入内部页面(如登录)的要求,则设置

Session["eligible-to-go-inside"] = "yes";

我将使用
会话
,因为它将在请求之间持久化。
Context.Items
集合将仅对一个请求有效,因此如果OP需要一些登录逻辑,那么它不是一个好的选择。如果是重定向页面,那么这是一个公平的解决方案。