Как создать «общедоступную» страницу профиля пользователя в ASP.NET (3.5) - PullRequest
0 голосов
/ 15 декабря 2010

Я реализовал пользовательские элементы управления ASP.NET.

Каждый пользователь может войти в систему и обновить свои личные данные, например, на личной странице myData.html

Теперь я хотел бы, чтобы часть их профиля отображалась в общедоступномнапример, только страница - userGreg45public.html

Как реализовать или изменить пользовательский элемент управления, чтобы каждый пользователь мог иметь собственную уникальную публичную страницу?

(Примечание. Существует «набор» файлов с одинаковыми именами для каждого пользователя, поскольку к ним можно получить доступ только при входе определенного пользователя. Например, myData.html имеет одно и то же имя, но отображает разные данные в зависимости от того, кто входитв. «Публичная страница» должна иметь уникальное имя файла для каждого участника)

Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010

Похоже, проблема в том, что вы хотите, чтобы у каждого пользователя был свой URL-адрес ... Это так?

Вы можете использовать перезапись URL. Один из более простых подходов заключается в использовании HttpContext.RewritePath в методе Application_BeginRequest вашего Global.asax файла.

РЕДАКТИРОВАТЬ: Добавлен пример кода

Здесь я делаю некоторые предположения ... Я предполагаю, что: а) у пользователей есть имя, б) у пользователей есть фамилия и в) у пользователей есть некоторый уникальный идентификатор, в моем случае я использую "идентификатор пользователя".

Для начала вам нужно будет выбрать формат для публичных URL. Примерно так может работать:

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

Где 1234 - идентификатор пользователя.

Далее вам понадобится функция для создания этих 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 .

Следующим является Регекс, который выполняет тяжелую работу. Он в основном совпадает с любыми запросами к вашей странице профиля пользователя и внутренне указывает ASP.Net направить запрос на другую страницу. Новые запросы будут выглядеть примерно так:

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

Вы должны реализовать страницу /public/userProfile.aspx. Есть множество способов сделать вещи только для чтения. Это может быть так же просто, как замена TextBox элементов управления Label элементов управления?

Если у вас есть несколько страниц, которые вы хотите сделать общедоступными, вы можете реализовать несколько правил перезаписи. (Хотя в какой-то момент вам лучше использовать такой компонент, как , или , ).

Как к сведению, я ссылался на образцы на этой странице для переписывания. Дайте мне знать, если у вас есть какие-либо вопросы.

2 голосов
/ 15 декабря 2010

По умолчанию вы можете назначить роль «гость» пользователю, посетившему сайт.

1 голос
/ 15 декабря 2010

Я только что реализовал что-то подобное на сайте.Я создал две страницы.Тот, который был закрытым и требовал, чтобы пользователь вошел в систему. Эта страница позволила пользователю редактировать свой профиль.

А другая страница была общедоступной.Он не разрешал редактирование, и он был в месте, доступном для просмотра любому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...