2013-03-21 2 views
0

Я хочу, чтобы настроить следующий URL в моем веб-сайте MVC4, используя полное имя пользователя в URL:MVC пользователя в URL-адресе, как обрабатывать дубликаты

http://www.myapp.com/profile/steve-jones 

Я установки следующий маршрут в Global .asax:

routeCollection.MapRoute(
     "profile", "profile/{userName}", 
     new { controller = "myController", action = "profile", userName = string.Empty 
    }); 

и я могу взять параметр 'steve-jones' и сопоставить его пользователю с именем соответствия. Моя единственная проблема, хотя, что, если есть более одного 'Steve Jones', как я могу справиться с этим?

Кто-нибудь знает об обходном пути/решении для этого, чтобы я мог использовать полное имя пользователя как часть URL-адреса и все еще иметь возможность получить правильный пользователь в методе контроллера?

Я вынужден включить идентификатор пользователя с URL-адресом (что-то, что я не хочу появляться)?

ответ

2

Обычный способ обращения с этим путем добавления числа при создании профилей. Поэтому, если «steve-jones» уже является именем в базе данных, сделайте отображаемое имя пользователя «steve-jones2». В основном вы должны настаивать на том, что все URL-адреса профиля уникальны, что включает в себя обновление любой существующей базы данных и кода создания учетной записи.

В качестве альтернативы (и/или дополнительно), если найдены два одинаковых имени, повторите перенаправление сценария на страницу значений, где пользователю представлены ссылки и фрагменты информации профиля многих существующих Стив Джонсес, чтобы они могли перейти к полный правильный профиль.

Другим способом обработки является предоставление всех пользовательских профилей дополнительного числового кода на конце. В моем университете все логины основаны на имени, поэтому они дают всем псевдослучайным 3-значным расширениям, чтобы они были в безопасности, если они не получают 1000 человек с одинаковыми именами :)

Некоторые люди могут быть счастливее steve-jones-342, если нет steve-jones или steve-jones1, если вы обеспокоены.

+0

спасибо Брайан, очень полезно. Единственная проблема заключается в том, что нет имен пользователей только с именами и фамилиями, и у меня нет доступа к db, поскольку он обрабатывается CRM – DevDave

+1

. Я вижу, тогда вам придется делать это на лету. Возможно, если бы у вас была дата создания учетной записи, вы могли бы сортировать ее и назначать номера таким образом, поэтому первый steve всегда был бы steve1 и т. Д. Таким образом, вы могли бы иметь эффективную мета-переменную, которой вам не нужно изменять базу данных для. – BrianHall

+0

хорошая идея, может попытаться подойти так, спасибо – DevDave