2017-02-14 10 views
0

При входе в систему я хочу перейти на новую страницу. (Пример: mysite.com/Dashboard/User/Username)Приложение MVC Имя пользователя в пути при входе в систему

Я также хочу, чтобы он подтвердил, что пользователь вошел в систему, прежде чем он разрешит доступ к указанному URL-адресу.

Я новичок в MVC и C# и ценю вашу помощь.

Мой контроллер: Что нужно передать в контроллер, чтобы он работал?

public class DashboardController : Controller 
{ 
    // GET: Dashboard 
    public ActionResult User() 
    { 
     return View(); 
    } 
} 

Route.config.cs:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
      name: "UserNameRoute", 
      url: "{username}", 
      defaults: new { controller = "Dashboard", action = "User", username = "" } 
     ); 
    } 
} 
+0

Возможный дубликат [Как изменить маршрут к имени пользователя после входа?] (Http://stackoverflow.com/questions/36996021/how-to-change-route-to-username-after-logged-in) – NightOwl888

+0

@ NightOwl888 Это именно то, что я искал. Благодаря! – NucleusDevelopment

ответ

0

Я считаю, что это должно быть что-то вроде этого:

routes.MapRoute(
    name: "UserNameRoute", 
    url: "Dashboard/User/{username}", 
    defaults: new { username = "" } 
); 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

я решил не ставить {controller} и {action} заполнителей в шаблоне поскольку это сделает его равным шаблону маршрута по умолчанию. Конечно, вы можете использовать только шаблон действий, если это то, что вам нужно:

routes.MapRoute(
    name: "UserNameRoute", 
    url: "Dashboard/{action}/{username}", 
    defaults: new { action = "User", username = "" } 
); 

Кроме того, обратите внимание, я положил его перед маршрутом по умолчанию, потому что это более конкретно. В противном случае маршрут по умолчанию будет захватывать каждый запрос.

Авторизация что-то вы не можете сделать здесь. Вам нужно будет сделать это, например. создание настраиваемого подкласса AuthorizeAttribute, который проверяет, совпадает ли имя пользователя с зарегистрированным пользователем.

+1

'[Авторизовать]' недостаточно. Это будет проверять только то, что * какой-либо пользователь зарегистрирован *, не обязательно тот же пользователь, что указан в URL-адресе. OP понадобится специальный атрибут '[Authorize]', который добавит проверку для этого. Кроме того, вы должны добавить пример кода для перенаправления на этот новый маршрут после входа пользователя, так как я думаю, что OP не знает, как это сделать. –

+0

Я, наверное, слишком много спросил. Я думаю, что нужно что-то передать в следующий за именем пользователя, чтобы проходить через контроллер, но не уверен, что: класс DashboardController общественности: Контроллер { общественного ActionResult пользователя() { возвращение View(); } } – NucleusDevelopment

+0

Вашему действию требуется параметр строки, называемый именем пользователя. – juunas