2012-05-30 94 views
0

我試圖讓網站上的用戶指定並更改他們自己獨特的虛榮網址。虛榮URL重新路由

我打算將選定的url存儲在數據庫中,我想調用它來重新路由到用戶。

截至目前,這是我的,但我不知道該從哪裏去。

routes.MapRoute(
      "User", // Route name 
      "User/Profile/{id}", // URL with parameters 
      new { controller = "User", action = "Profile", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { typeof(MvcApplication).Namespace + ".Controllers" } 
     ); 

有沒有什麼辦法讓我把Vanity Url和重新路由到PersonID?

我也嘗試操縱ActionResult來處理字符串Vanity Url或int PersonID,但是這似乎並沒有朝着正確的方向前進,所以我回到了routes.Maproute。

編輯:

我希望用戶能夠在

http://localhost:60619/User/Profile/Vanity 

進入,他們會在同一個地方結束,就好像他們進入

http://localhost:60619/User/Profile/224 Assuming the PersonID is 224 

的ActionResult:

 public ActionResult Profile(int ID) 
    { 
     ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID); 
     return View(ID); 
    } 
+0

爲我們提供了一個樣本* *網址和相關'行動簽名放在單個域中兩個不同的頁面method' – xandercoded

+0

好吧,我在編輯中添加了它(我認爲) – user1399217

回答

0

因此,答案是虛擬網址不會根據URL重新路由到每個用戶的單獨視圖。

取而代之的是虛榮URL將所有用戶路由到相同的視圖,並且視圖內容將根據虛空URL的值而改變。在這種情況下,虛榮URL的作用與數據庫ID完全相同。

例如:

  • :// XXX /用戶/資料/麥克
  • :// XXX /用戶/資料/史蒂夫
  • :// XXX /用戶/資料/彼得
  • :// xxx/User/Profile/Sonia

是否所有路由都是相同的視圖。

所以控制器內的代碼將加載基於麥克,史蒂夫,彼得內容等

這將是基於配置文件ID 24,56,88等加載內容相當於

你必須保證的個性化網址是獨一無二的,就像文件ID

下面是關於如何創建表的例子:

USE [mydb] 
GO 

/****** Object: Table [dbo].[Vanity] Script Date: 05/30/2012 13:53:57 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Vanity](
    [ProfileID] [int] NOT NULL, 
    [VanityURL] [nvarchar](50) NOT NULL, 
    [UserName] [nvarchar](50) NULL, 
    [Password] [nvarchar](50) NULL, 
CONSTRAINT [PK_Vanity] PRIMARY KEY CLUSTERED 
(
    [ProfileID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 


USE [mydb] 
/****** Object: Index [IX_Vanity] Script Date: 05/30/2012 13:53:57 ******/ 
CREATE UNIQUE NONCLUSTERED INDEX [IX_Vanity] ON [dbo].[Vanity] 
(
    [VanityURL] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

ALTER TABLE [dbo].[Vanity] WITH CHECK ADD CONSTRAINT [FK_Vanity_Vanity] FOREIGN KEY([ProfileID]) 
REFERENCES [dbo].[Vanity] ([ProfileID]) 
GO 

ALTER TABLE [dbo].[Vanity] CHECK CONSTRAINT [FK_Vanity_Vanity] 
GO 
0

你可以使用一些這樣的事它工作對我來說,使用下面的代碼,你可以通過只區分有

protected void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 

    public static void RegisterRoutes(RouteCollection routeCollection) 
    { 
     routeCollection.MapPageRoute("RouteForCustomer", "{Id}", "~/User.aspx"); 
     routeCollection.MapPageRoute("RouteForCustomer", "Home", "~/Default.aspx"); 
    }