重定向到MVC中的内部页面

时间:2012-08-26 21:14:23

标签: asp.net asp.net-mvc c#-4.0 asp.net-mvc-4 asp.net-mvc-routing

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

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

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

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

您最好的方法是什么?为什么?还有另一个吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

看起来你在这里所做的一切都是重定向。您可能希望查看使用IIS Url重写模块并创建重定向规则,例如

<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/

的大量信息

答案 2 :(得分:0)

www.website.com/products/productname会更加RESTful。将您的产品放在网站的根级别只会在您想要添加网站的其他部分时遇到麻烦。即www.website.com/about-us - 是关于我们的产品,还是它自己的页面?

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