0

我有一个用 ASP.NET MVC 4.5 编写的网站,我有一个控制器Products,其中包含有关每个产品的视图。

我希望我们的一种产品在用户访问 www.website.com/ProductName 时重定向到 www.website.com/Products/ProductName。

我现在正在考虑这两种方法:

  • 创建一个名为 like 的控制器ProductName并使用RedirectToRoute()
  • 修改RouteConfig.cs文件并添加一个。

你最好的方法是什么,为什么?还有一个吗?

4

3 回答 3

1

我和@rjovic 在一起,肯定会采用第二种方法并添加一条新路线。

第一种方法需要为每个产品创建一个新的控制器,这似乎违背了良好的设计原则;为什么要为行为相同的多个产品设置一个单独的类?路由正是为这种情况而设计的:将用户友好的 URL 方案映射到应用程序逻辑中的适当处理程序。

在这种情况下,设计路线有两种可能的方法:

  1. 匹配任何 URL,例如 /{ProductName}。问题是这是一个贪婪的方案,所以你想把它放在路由列表的末尾附近,这样它只会在没有其他方案匹配的情况下使用。
  2. 仅匹配与实际产品匹配的 /{ProductName} 等 URL。因此,您必须预先加载产品名称列表,并构造一个看起来像(例如)“[product1|product2|product3]”的约束。
于 2012-08-26T21:47:09.260 回答
0

看起来您在这里所做的只是一些重定向。您可能想查看使用 IIS Url Rewrite 模块并创建重定向规则,例如

<rewrite>
  <rules>
    <rule name="Redirect to Products/ProductName">
      <match url="^ProductName" />
      <action type="Redirect" url="Products/ProductName" />
    </rule>
  </rules>
</rewrite>

http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/上有很多信息

于 2012-08-26T21:55:52.213 回答
0

www.website.com/products/productname会更加RESTful。从长远来看,当您想添加网站的另一个部分时,将您的产品置于网站的根级别只会自找麻烦。即 www.website.com/about-us - about-us 是一种产品,还是它自己的页面?

创建一个 ProductsController 并具有一个默认操作,该操作采用一个作为产品名称的字符串。

于 2012-08-26T21:59:54.870 回答