首页 文章

如何在ASP.NET(3.5)中创建“公共”用户配置文件页面

提问于
浏览
0

我实现了ASP.NET用户控件 .

每个用户都可以登录并更新他们的个人数据,例如在私人页面上 myData.html

现在,我希望他们的 Profiles 的一部分显示在公共只读页面上,例如 - userGreg45public.html

如何实现或修改用户控件,以允许每个用户拥有自己的 unique 公共页面?

(注意 - 每个用户都有一组“文件”命名完全相同,因为只有在特定人员登录时才能访问这些文件 . 例如,myData.html具有相同的名称,但根据谁显示不同的数据登录 . “公共页面”必须为每个成员提供唯一的文件名)

谢谢 .

3 回答

  • 4

    听起来问题是你希望每个用户都有自己的网址......是这样的吗?

    您可以使用URL重写 . 一种更简单的方法是在 Global.asax 文件的 Application_BeginRequest 方法中使用HttpContext.RewritePath .

    EDIT: 添加了示例代码

    我在这里做了一些假设......我所做的假设是:a)用户有名字,b)用户有姓氏,c)用户有一些唯一标识符,在我的情况下,我使用的是“userId” .

    首先,您必须决定公共网址的格式 . 像这样的东西可以工作:

    http://www.yoursite.com/public/firstname-lastname-1234.aspx
    

    其中1234是userId .

    接下来,您将需要一个函数来构建这些URL . 也许这样的东西:

    String ToPublicUrl(String firstName, String lastName, int userId)
    {
        return String.Format("http://www.yoursite.com/public/{0}-{1}-{2}.aspx",
            Regex.Replace(firstName, "[^a-zA-Z]", ""),
            Regex.Replace(lastName, "[^a-zA-Z]", ""),
            userId);
    }
    

    请注意我是如何剥离任何非字母字符的 .

    现在,在Global.asax文件中,添加以下代码:

    static Regex ProfileRegex = new Regex(@"/public/(?<firstname>[a-zA-Z]+)-(?<lastname>[a-zA-Z]+)-(?<userid>[0-9]+)\.aspx$",
        RegexOptions.IgnoreCase | RegexOptions.Compiled);
    
    void Application_BeginRequest(object sender, EventArgs e)
    {
        Match match = ProfileRegex.Match(Context.Request.FilePath);
        if( (match != null) && match.Success )
        {
            Context.RewritePath((String.Format("~/public/userProfile.aspx?userId={0}",
                match.Groups["userid"]));
        }
    }
    

    这里有很多东西 . 首先,通过简单地定义此函数,ASP.Net将订阅它到HttpApplication.BeginRequest事件 .

    接下来是Regex进行繁重的工作 . 它基本上匹配任何对用户配置文件页面的请求,并在内部告诉ASP.Net将请求路由到另一个页面 . 新请求看起来像这样:

    http://www.yoursite.com/public/userProfile.aspx?userId=1234
    

    由您来实现 /public/userProfile.aspx 页面 . 有许多方法可以让事情变得简单 . 它可能像用Label控件替换TextBox控件一样直截了当?

    如果您想要公开多个页面,则可以实现多个重写规则 . (虽然在某些时候你最好使用像thisthis这样的组件) .

    作为一个FYI,我在this page上引用了重写内容的样本 . 如果您有任何疑问,请告诉我 .

  • 2

    默认情况下,您可以为访问过该站点的用户分配“guest”等角色 .

  • 1

    我刚刚在网站上实现了这样的东西 . 我创建了两个页面 . 一个是私有的并且要求用户登录 . 该页面允许用户编辑他们的 Profiles .

    另一页是公共页面 . 它不允许编辑,它位于任何人都可以查看的位置 .

相关问题