【发布时间】:2016-02-27 01:38:54
【问题描述】:
我正在开发一个新的 asp.NET 项目(具体来说是 .NET 版本 4.5)。我正在尝试使用最佳实践来创建这个项目,但不幸的是,我不知道在这种情况下要查找的术语 - 希望这个问题能说明问题。
从默认模板创建新项目后,我获得了登录系统所需的页面。我现在想做到这一点,以便整个站点都需要登录,然后您才能看到任何内容。为此,我只需检查您的用户是否在页面加载时登录,如果没有,则将您重定向到登录页面。
这是我目前所拥有的 - 它工作正常,但不是“全球性的”。
在单个页面上:
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 中使用“this”上下文,这是有道理的 - 但我不知道替代方案是什么。
我这样做是否正确?有没有更好的办法?如何使项目中每个页面的身份验证要求“全局”?
【问题讨论】:
-
您可能想看看msdn.microsoft.com/en-us/library/…,尤其是授权过滤器。
-
为什么不能在主文件中使用
this? -
@Chris 我现在正在阅读这些页面,我到底应该寻找什么?我会把这样的过滤器放在哪里?
-
@Chris 你已经为 MVC 链接了一篇文章,而这正在使用网络表单,所以没用。
-
@DavidG 虽然我想我可以使用它,但它是
SiteMaster类型而不是_Default类型 - 并且SiteMaster没有 .User 的定义
标签: c# asp.net this master-pages