asp.net-mvc – ASP.Net MVC路由到用户名

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.Net MVC路由到用户名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个带有用户名的路由

所以URL是mydomain.com/abrudtkhul(abrudtkhul是用户名)

我的应用程序将有基于用户名的公共配置文件(例如:http://delicious.com/abrudtkuhl)。我想复制这个URL方案。

我如何在ASP.Net MVC中构建这个?我也在使用会员/角色提供商。

解决方法

这是您要做的,首先定义您的路线图:
routes.MapRoute(
             "Users","{username}",new { controller = "User",action="index",username=""});

这允许你做的是设置以下惯例:

>控制器:用户(UserController类型)
> Action:Index(这被映射到UserController的Index方法)
>用户名:这是Index方法的参数

所以当你请求url http://mydomain.com/javier时,这将被转换为UserController.Index(string username)的调用,其中username被设置为javier的值。

现在,由于您计划使用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类型的有效实例。

原文链接:https://www.f2er.com/aspnet/253722.html

猜你在找的asp.Net相关文章