0

我试图允许网站上的用户指定和更改他们自己独特的 Vanity 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

行动结果:

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

2 回答 2

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");
    }
于 2012-10-10T10:33:33.940 回答
0

所以答案是虚 URL 不会根据 URL 重新路由到每个用户的单独视图。

相反,虚 URL 会将所有用户路由到同一个视图,并且视图内容将根据虚 URL 的值而改变。在这种情况下,虚 URL 的工作方式与数据库 ID 完全相同。

例如:

  • ://xxx/用户/个人资料/迈克
  • ://xxx/用户/个人资料/史蒂夫
  • ://xxx/用户/个人资料/彼得
  • ://xxx/用户/个人资料/索尼娅

将所有路由相同的视图。

所以控制器内部的代码会加载基于 Mike、Steve、Peter 等的内容。

这相当于加载基于配置文件 id 24、56、88 等的内容。

您必须保证虚 URL 是唯一的,就像个人资料 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
于 2012-05-30T17:44:22.160 回答