将ASP.NET Webforms的URL转换为MVC路由

4
我正在用新的MVC应用程序替换旧的ASP.NET WebForms应用程序。然而,我有一个问题,用户拥有指向特定页面的旧链接,我希望自动将其转换为正确的MVC路由。

旧网站:http://mysite.com/ticketsdetail.aspx?id=12345

新网站:http://mysite.com/tickets/details/12345

在MVC路由中是否有一种方法可以捕获旧URL并将其转换为新URL?

编辑:

好的,使用IIS7 URL重写进行此操作的web.config条目是:

<rewrite>
  <rules>
    <rule name="Ticket page redirect" stopProcessing="true">
      <match url="ticketsdetail.aspx$" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="id=(\d*)$" />
      </conditions>
      <action type="Redirect" url="Calls/Tickets/{C:1}" appendQueryString="false" redirectType="Temporary" />
    </rule>
  </rules>
</rewrite>
2个回答

2
我建议您不要在代码中这样做,除非您确实需要。Scott Hanselman在如何使用IIS Url Rewrite在web.conf中完成所需内容方面有一篇很好的文章。 文章在这里 这将是您在web.config中应该放置的规则:
<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
    <match url="^ticket/details/([^/]+)/?$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="ticketdetails.aspx?id={R:1}" />
</rule>

你的输入和输出顺序颠倒了,但这正好达到了我们需要的目的,谢谢。 - Nick

0
如果您使用的是IIS7,那么URL重写工具非常棒; http://learn.iis.net/page.aspx/460/using-url-rewrite-module/ 这是一篇不错的文章; http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/ 你应该使用哪个选项? 如果你需要选择一种技术来为你的Web应用程序启用干净的URL,那么所有这些信息意味着什么?在本节中,我们将解释如何做出这个选择。
如果你的Web应用程序不是使用ASP.NET构建的,请使用IIS URL Rewrite模块。否则,规则如下:
  1. 如果你正在开发一个新的ASP.NET Web应用程序,使用ASP.NET路由,它可以使用ASP.NET MVC或ASP.NET Dynamic Data技术。你的应用程序将受益于对干净URL的本地支持,包括为Web页面中的链接生成干净URL。请注意,ASP.NET路由尚不支持标准Web Forms应用程序,尽管未来有计划支持。
  2. 如果你已经有一个遗留的ASP.NET Web应用程序,并且不想更改它,请使用URL Rewrite模块。URL Rewrite模块允许你将搜索引擎友好的URL转换为你的应用程序当前使用的格式。此外,它还允许你创建重定向规则,可用于将搜索引擎爬虫重定向到干净的URL。

然而,对我来说,在 IIS 级别让 URL 重写器解决这种问题是很合理的,特别是因为你需要使用正则表达式来拆分查询字符串以形成新的 URL。URL 重写器在这方面做得非常出色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接