ASP.NET MVC指定URL路由之外的类别/路径

时间:2018-05-01 16:34:28

标签: asp.net-mvc url cookies routing

我有一个问题是决定在URL路由上放置类别/路径。假设我的示例Web应用程序中有一些产品附加到某些类别。例如:

Book1 Attached to -> Category1 | Category2 
Book2 Attached to -> Category1 | Category2 | Category3
Book3 Attached to -> Category2 | Category3

定义产品的路线图是:

url: "{controller}/{action}/{languageCode}/{category}/{product}"
defaults: new { controller = "Home", action = "ViewItem" }

因此Book1的可能路由是:

[Domain Name]/Home/ViewItem/en-US/Category1/Book1
[Domain Name]/Home/ViewItem/en-US/Category2/Book1

Book2的可能路由是:

[Domain Name]/Home/ViewItem/en-US/Category1/Book2
[Domain Name]/Home/ViewItem/en-US/Category2/Book2
[Domain Name]/Home/ViewItem/en-US/Category3/Book2

我想保存并了解当前类别,但每个产品都有唯一的唯一网址(用于搜索引擎跟踪和共享网址目的)。我考虑使用会话变量 ViewBag 甚至 Cookie ,但每个都有自己的局限性和缺点。例如,使用cookie可能会导致一些麻烦: 如果设置过期时间太短,当用户在某些页面上暂停时可能会丢失当前路径,如果设置太长,可能会导致用户使用旧浏览路径甚至用户请求因为现有的cookie 而在新的开放浏览器中显示主页(除此之外,我对cookie有一些经验并且我认为这种情况并非完全正常),关于会话 ViewBag 我不知道使用它们是否是最好的主意,那么任何人都可以分享经过测试的解决方案或好主意吗?我会很感激的。

2 个答案:

答案 0 :(得分:2)

您应该拥有mywebsite.com/product1页面(URL的规范版本)。包括URL的所有版本都无济于事。可能,它会让Google感到困惑,并可能导致Google忽略某些网址

即使您输入了规范版本并在网页上添加了规范标记,Google仍可能会选择将其他版本的网址视为规范。

理想情况下,我在这里解决了真正的问题,并且在您的网站上只有一个版本的产品网址(将URL中的类别版本重定向到URL的版本,网址中没有类别)。这样,您甚至不必担心重复内容可能导致的所有问题。

答案 1 :(得分:1)

我怀疑这不是路由问题,而是架构问题。我认为“语言代码”和“类别”应该是Book对象的属性,而不是路径的一部分。

然后您将拥有以下网址:

{域} / {控制器} /书/ ID

对于“类别”特定或“语言代码”特定视图,您可以使用以下网址:

{域} / {控制器} /查询语言代码=&美式英语版本放大器;类别= 1

这仍然是完美的RESTful,在我看来,也更简单。