我正在开发一个新的asp.NET项目(特定于.NET 4.5版)。我尝试使用最佳做法创建此项目,但不幸的是,我不知道在这种情况下要查找的术语 - 希望这个问题能说清楚。
从默认模板创建新项目后,我获得了登录系统所需的页面。我现在想要这样做,以便整个网站需要登录才能允许您查看任何内容。为此,我只需检查您的用户是否在页面加载时登录,如果没有,则将您重定向到登录页面。
这是我到目前为止所做的 - 它运作良好,但不是全球性的#34;
在个别页面上:
protected void Page_Load(object sender, EventArgs e)
{
//If the user isn't logged in, make them log in
redirectIfNotLoggedIn(this);
}
public static void redirectIfNotLoggedIn(_Default _Default)
{
if (!_Default.User.Identity.IsAuthenticated) { _Default.Response.Redirect("~/Account/Login.aspx"); }
}
它有效 - 如果我没有登录,它会将我带到Login.aspx页面。如果我已登录,我可以浏览该网站。这段代码的问题是我必须将它复制并粘贴到每个页面中。因此,我希望将此代码放在Site.Master文件的Page_Load中,这会强制用户无论他们尝试访问哪个页面都进行身份验证。但是,我无法使用'这个' Site.Master中的上下文,这是有道理的 - 但我不知道替代方案是什么。
我是以正确的方式来做这件事的吗?有没有更好的办法?如何制定身份验证要求" global"对于项目中的每个页面?
答案 0 :(得分:2)
在MasterPage中,您可以使用this.Page
来获取您要查找的页面对象。
但也考虑一种不同的方式:
我通常创建一个继承自MyBasePage
的类System.Web.UI.Page
,并将我的Web应用程序中所有页面共享的所有(或大多数)公共逻辑放在那里。
然后我创建每个页面,将基类从System.Web.UI.Page
修改为MyBasePage