Вот что вы хотите сделать, сначала определите вашу карту маршрута:
routes.MapRoute(
"Users",
"{username}",
new { controller = "User", action="index", username=""});
Что это позволяет вам сделать, это настроить следующее соглашение:
- Контроллер: Пользователь (тип UserController)
- Действие: Индекс (это сопоставлено с методом Index в UserController)
- Имя пользователя: это параметр для метода Index
Поэтому, когда вы запрашиваете URL http://mydomain.com/javier, это будет преобразовано в вызов для UserController.Index (строка username) , где username имеет значение хавьер .
Теперь, так как вы планируете использовать классы MembershipProvider, вы хотите что-то более похожее на это:
public ActionResult Index(MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.UserName;
return View();
}
Чтобы сделать это, вам нужно будет использовать ModelBinder для выполнения, ну, в общем, привязки имени пользователя к типу MembershipUser. Для этого вам необходимо создать собственный тип ModelBinder и применить его к пользовательскому параметру метода Index. Ваш класс может выглядеть примерно так:
public class UserBinder : IModelBinder
{
public ModelBinderResult BindModel(ModelBindingContext bindingContext)
{
var request = bindingContext.HttpContext.Request;
var username = request["username"];
MembershipUser user = Membership.GetUser(username);
return new ModelBinderResult(user);
}
}
Это позволяет вам изменить объявление метода Index на:
public ActionResult Index([ModelBinder(typeof(UserBinder))]
MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.Username;
return View();
}
Как видите, мы применили атрибут [ModelBinder (typeof (UserBinder))]] к параметру метода. Это означает, что перед вызовом вашего метода будет вызываться логика вашего типа UserBinder , поэтому к моменту вызова метода у вас будет действительный экземпляр вашего типа MembershipUser.