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类型的有效实例。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....