1

我已经有一个自定义的 C#/ASP.NET 网站,它由一个母版页和几个子页组成。子页面是相互关联的。在网站上,我也有几个自定义实用程序类,我从子页面调用这些类。该网站还连接到 SQL 数据库,并从代码中调用多个自定义类库进行数据处理。

现在我需要将此自定义网站集成到 DotNetNuke 网站上。我已经托管了 7.0.1 版本的 DotNetNuke 网站。

如何将我的网站集成到托管的 DotNetNuke 网站?

我找到了 2 个解决方案,
第一个是使用 DNN Iframe 模块,但我无法使用该选项。第二种选择是将单个网页转换为用户控件并添加为 DNN 模块,但在我的情况下,该网站有一个母版页、相互关联的子页和实用程序类。因此,将每个页面转换为用户控件以创建 DNN 模块将是一项艰巨的任务。

谁能建议一种更好的方法将我的网页集成到托管的 DNN 网站上。

4

1 回答 1

0

我们所做的是保留 2 个网站。通过相同样式的母版页和 DNN 皮肤,它看起来就像一个面向最终用户的网站。使用从 DNN 到 Asp.NET 网站的链接。您可以使用自定义角色提供者来使用相同的授权

public class DNNRoleProvider : System.Web.Security.RoleProvider
{
    public override string[] GetRolesForUser(string username)
    {
        List<string> roles = new List<string>();
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DNNDB"].ConnectionString))
        {
            con.Open();
            string sql = "SELECT r.RoleName FROM dbo.UserRoles ur INNER JOIN dbo.Roles r on ur.RoleID = r.RoleID INNER JOIN dbo.Users u ON u.UserID = ur.UserID WHERE u.Username = @username";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("username", username));
            SqlDataReader reader = cmd.ExecuteReader();
            using (reader)
            {
                while (reader.Read())
                {
                    roles.Add(reader["RoleName"].ToString());
                }
            }

            return roles.ToArray();
        }
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        bool ret = false;

        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DNNDB"].ConnectionString))
        {
            con.Open();
            string sql = "SELECT count(0) FROM dbo.UserRoles ur INNER JOIN dbo.Roles r on ur.RoleID = r.RoleID INNER JOIN dbo.Users u ON u.UserID = ur.UserID WHERE u.Username = @username and r.RoleName = @rolename";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("username", username));
            cmd.Parameters.Add(new SqlParameter("rolename", roleName));
            SqlDataReader reader = cmd.ExecuteReader();
            using (reader)
            {
                if (reader.Read())
                {
                    ret = reader[0].ToString() == "0" ? false : true;
                }
            }
        }

        return ret;
    }

    //rest of interface implementation

}
于 2013-09-26T09:52:16.697 回答