加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 18:43:19 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个带有用户名的路由 所以URL是mydomain.com/abrudtkhul(abrudtkhul是用户名) 我的应用程序将有基于用户名的公共配置文件(例如:http://delicious.com/abrudtkuhl)。我想复制这个URL方案。 我如何在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类型的有效实例。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读