0

我想在 asp.net 中控制用户身份验证。

假使,假设; 有两个来自 StackOverflow.aspx 和 Default.aspx 之类的网站。

我想使用以下代码获得经过身份验证的角色:

public List<Roles> GetAuthenticatedRolesByModuleName(string moduleName)
{
    //below I wrote psedeu code
    var roles = "Select * From SiteRoles Where ModuleName = "Admin";
    //...   
}
//This function returns a result set which includes roles authentication for `moduleName` parameter.

我将使用当前登录系统的角色来控制它。

我想在 asp.net 的基本页面中这样做。

为了做到这一点,我做了一个BasePage.cs继承自System.Web.UI.Page. 我想将GetAuthenticatedRolesByModuleName函数写入BasePage.cs,当用户输入时,StackOverflow.aspx我想从BasePage.cs.

StackOverflow.aspx有页面加载事件,我想我必须控制Init().

我用谷歌搜索并找到了一些来源,例如:ASP.net“BasePage”类的想法 ,但我并没有理解清楚。

我想从基本页​​面函数中获取角色(moduleName 是 stack-overflow --> GetAuthenticatedRolesByModuleName(stack-overflow))并使用当前角色进行控制。如果用户未通过身份验证,我会将其重定向到Default.aspx.

Response.Redirect("Default.aspx");

我该怎么做?你能告诉我实现它的方法吗?

4

1 回答 1

1

如果您使用OnpreInit或 制作一个基页以全局检查它,那么OnInit将是这样的:

public abstract class BasePage : System.Web.UI.Page
{
    protected override void OnPreInit(EventArgs e)
    {
        string cTheFile = HttpContext.Current.Request.Path;

        // here select what part of that string you won to check out
        if(!GetAuthenticatedRolesByModuleName(cTheFile))
        {
            // some how avoid the crash if call the same page again
            if(!cTheFile.EndsWith("Default.aspx"))
            {       
                Response.Redirect("Default.aspx", true);
                return ;
            }
        }

        // continue with the rest of the page
        base.OnPreInit(e);
    }
}

但您也可以进行相同的检查并global.asax使用Application_AuthenticateRequestas:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    // αυτό είναι το path...
    string cTheFile = HttpContext.Current.Request.Path;

    // here select what part of that string you won to check out
    if(!GetAuthenticatedRolesByModuleName(cTheFile))
    {
        // some how avoid the crash if call the same page again
        if(!cTheFile.EndsWith("Default.aspx"))
        {       
            Response.Redirect("Default.aspx", true);
            Response.End();

            return ;
        }
    }
}       

也许根据您的代码需要添加一些细节,但这是一般的想法。

于 2012-12-02T22:40:38.610 回答