2017-02-14 67 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

'[Authorize]'是不夠的。這將只驗證*某些用戶已登錄*,不一定與URL中指定的用戶相同。 OP將需要一個自定義的'[Authorize]'屬性,爲其添加一個檢查。此外,您應該添加示例代碼,以便在用戶登錄後如何重定向到新路由,因爲我認爲OP不知道如何執行該操作。 –

+0

我可能問得太多了。我想我需要的東西進入的用戶名通過控制器通過了以下,但不知道是什麼: 公共類DashboardController:控制器 { 公衆的ActionResult用戶(){ 回報 視圖(); } } – NucleusDevelopment

+0

您的操作需要一個名爲username的字符串參數。 – juunas