Esto es lo que quiere hacer, primero definir su mapa de rutas:
routes.MapRoute(
"Users",
"{username}",
new { controller = "User", action="index", username=""});
Lo que esto le permite hacer es configurar la siguiente convención:
- controlador: Usuario (del tipo UserController)
- Acción: Índice (esto se asigna al método de Índice de UserController)
- Nombre de usuario: este es el parámetro para el método de Índice de
Así que cuando se solicita la URL http://mydomain.com/javier esto se traduce a la convocatoria de UserController.Index (nombre de usuario cadena) donde nombre de usuario se establece en el valor de Javier .
Ahora ya está pensando en el uso de las clases MembershipProvider, que desea algo más parecido a esto:
public ActionResult Index(MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.UserName;
return View();
}
Con el fin de hacer esto, usted tendrá que utilizar un ModelBinder a hacer el trabajo de, bueno, vinculando desde un nombre de usuario a un tipo de Usuario de Membresía. Para hacerlo, deberá crear su propio tipo de ModelBinder y aplicarlo al parámetro de usuario del método Index. Su clase puede ser algo como esto:
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);
}
}
Esto le permite cambiar la declaración del método Índice ser:
public ActionResult Index([ModelBinder(typeof(UserBinder))]
MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.Username;
return View();
}
Como se puede ver, hemos aplicado el [ModelBinder (typeof (UserBinder))] atributo al parámetro del método. Esto significa que antes de que se llame a su método, se llamará a la lógica de su UserBinder, de modo que cuando se llame al método, tendrá una instancia válida de su tipo MembershipUser.
Esto ha cambiado en versiones más recientes de MVC ahora debería ser: objeto BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) – Keith
obtengo un nombre de usuario nulo en El modelo Binder ¿Por qué? –
@Keith Todo funciona bien pero el enrutamiento url no funciona –