Похоже, проблема в том, что вы хотите, чтобы у каждого пользователя был свой 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 элементов управления?
Если у вас есть несколько страниц, которые вы хотите сделать общедоступными, вы можете реализовать несколько правил перезаписи. (Хотя в какой-то момент вам лучше использовать такой компонент, как , или , ).
Как к сведению, я ссылался на образцы на этой странице для переписывания. Дайте мне знать, если у вас есть какие-либо вопросы.