Как написать маршрут, который включает в себя имя пользователя - PullRequest
1 голос
/ 19 августа 2011

Я создаю веб-сайт asp.net mvc, после входа в систему пользователь может получить доступ к страницам раздела своего профиля, и в настоящее время URL этих страниц похож на www.example.com/profile, я хочу, чтобы URL был такимwww.example.com/USERNAME

Как написать этот маршрут, который будет работать только на странице профиля при входе пользователя?

Обновление:

основываясь на ответах ниже, я написал это так:

routes.MapRoute(
                "AccountSettins",
                   "AccountSettings",
               new { controller = "AccountSettings", action = "Index" }
            );

            routes.MapRoute(
                 "myRouteName",
                    "{username}",
                new { controller = "Profile", action = "Index" }
             );


            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

и контроллер:

[Authorize]
    public class ProfileController : BaseController
    {
        //
        // GET: /Profile/

        public ActionResult Index(string username= "")
        { ...

Но теперь, после входа пользователя в систему и его имени «xyz» он можетперейдите на www.example.com/xyz, и это приведет к странице профиля, но если он также напишет URL www.example.com/abc, он перейдет на ту же страницу профиля, что обычно странно с точки зрения пользователя.посмотреть, как решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 19 августа 2011

В вашем Global.asax ...

routes.MapRouteWithName(
    "routeUserProfile",
    "{username}",
    new { controller = "User", action = "Profile", username = "" });

В вашем пользовательском контроллере ....

public ActionResult Profile(string username) {
    //conditional logic to check if username is user
    // render user profile with special user-only stuff
    //else
    // render only generic stuff about user
}
1 голос
/ 21 августа 2011

Чтобы пользователь не мог видеть профиль других, просто отметьте в действии, может ли он / она это сделать.

public ViewResult Index(string username)
{
  if (CanSeeOthersProfiles(username)) //your function to check currently logged user and his privileges
  {
     var model = new MyModel();
     //do your logic
     return View(model);
  }
  else
     return RedirectToAction("index", "home");
}
1 голос
/ 20 августа 2011

В файле global.asax добавьте следующие маршруты

        routes.MapRoute(
            "UsersRoute", // Route name
            "{username}", // URL with parameters
            new { controller = "Test", action = "Index", username = "" } 
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );

И в соответствии с первым маршрутом добавьте следующий контроллер, как показано ниже

public class TestController : Controller
{       
    public ActionResult Index(string username )
    {
        var p = username;
        return View();
    }
}
1 голос
/ 19 августа 2011

Вам необходимо написать контроллер специально для этого и создать маршрут, например:

routes.MapRoute(
  "UserPage", // Route name
  "{username}", // URL with parameters
  new { controller = "User", action = "Index", username = ""} // Parameter defaults
  );

Подробнее см. Здесь: http://dotnet.dzone.com/articles/aspnet-mvc-routing-basics?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+zones%2Fdotnet+(.NET+Zone)

1 голос
/ 19 августа 2011
routes.MapRoute(
    "myRouteName",
    "{username}",
    new { controller = "Home", action = "Profile" }
    );

Вы можете указать свой контроллер и действие, которое хотите, и просто использовать имя пользователя для своего параметра для метода Profile класса Home.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...