Asp.net 如果Url无效,请在抛出404错误之前执行传统Url查找

Asp.net 如果Url无效,请在抛出404错误之前执行传统Url查找,asp.net,Asp.net,我正在重新编写一个旧网站,该网站使用了许多不同的非微软技术。新网站是asp.net web窗体 我在数据库中有一个旧url列表,有一个例程,它将根据数据库中的url列表检查请求的页面url,并执行相应的301重定向到新url的内容 但是,从效率的角度来看,我的问题是,只有当请求的url本质上是404/未找到时,我才能执行这个旧的url查找。我不想对每个页面请求(通过global.asax中的应用程序_BeginRequest)启动“检查旧URL并在找到时重定向”例程,因为大多数情况下,请求的页面

我正在重新编写一个旧网站,该网站使用了许多不同的非微软技术。新网站是asp.net web窗体

我在数据库中有一个旧url列表,有一个例程,它将根据数据库中的url列表检查请求的页面url,并执行相应的301重定向到新url的内容

但是,从效率的角度来看,我的问题是,只有当请求的url本质上是404/未找到时,我才能执行这个旧的url查找。我不想对每个页面请求(通过global.asax中的应用程序_BeginRequest)启动“检查旧URL并在找到时重定向”例程,因为大多数情况下,请求的页面将是一个有效的新.net页面,不需要301重定向。因此,我希望只有在例程本质上即将抛出404错误时才能启动例程

我检查数据库中旧站点URL的例程是缓存的,因此至少它不会每次都访问数据库,但我只是想防止它在不必要时调用此例程(有时在缓存过期时访问数据库)

我在想,也许我可以在global.asax中的Application_Error例程中执行旧的url查找,检查404状态的错误代码,在那种情况下,执行旧的url查找,但是在测试时,它似乎没有在global.asax中的应用程序错误例程中遇到我的断点-相反,浏览器显示的是IIS 7 404 Not Found错误

浏览器必须接收到对新url的301响应,并且不会得到错误的404响应代码(除非请求的url既不是新url也不是旧url)


有谁能推荐一种有效的方法来处理这种情况吗?

我认为最好的办法是为所有旧的URL-s安装并创建重定向。您可以在单独的XML文件中使用301重定向,这是一种更干净的方法,下面是一篇关于这一点的文章:

更新:您可以简单地列出url,如下所示:

    <rule name="Redirect map bluesunhotels">
      <match url=".*"/>
      <conditions>
        <add input="{bluesunhotels:{REQUEST_URI}}" pattern="(.+)"/>
      </conditions>
      <action type="Redirect" url="{C:1}" appendQueryString="false"/>
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="bluesunhotels">
      <add key="/index.php?show=2326" value="/resort-afrodita.aspx"/>
      <add key="/index.php?show=2271" value="/starigrad-paklenica.aspx"/>
    </rewriteMap>
  </rewriteMaps>


创建一个自定义404页面,并在需要时从该页面重定向。有什么原因不能让IIS处理这个问题吗?然后,任何旧链接在到达您的站点之前都会被发出301重定向-更不用说性能影响了。旧URL没有一致的模式-它们是一团混乱,因此,我无法告诉IIS要查找哪种类型的url/模式。在我的情况下,我能看到的唯一问题是,我依赖我的asp.net项目生成新的url/路由,因此我不想硬编码重定向目标值,由于我的开发环境和生产环境中的新url之间会有差异(始终使用不同的id等)。请注意301是永久重定向,浏览器会永久缓存它,也许您可以将其重定向到单个重定向页面,然后根据一些代码再次重定向,马特·卡茨说,有两个重定向@AntonioBakula是可以的。你们能在这个链接上回答我吗?我已经试过了,和你们说的一样,但问题来了