c# - asp.net mvc 遗留路由映射

标签 c# asp.net-mvc url-rewriting

我有一个遗留的 asp.net 网站,我正在迁移到 asp.net mvc。

我想将现有 url 永久重定向到 asp.net mvc Controller 。我的 Controller 具有这些链接的新位置的 View ,我想在现有页面上执行 301 重定向到新 View 。

我有两种不同类型的 url:

  1. http://foosite.com/privacy.aspx
  2. http://foosite/bar/content-name

类型 2 url 是 asp.net mvc 路由处理之前的现有 url 重写器模块的结果。

我有现有的重定向代码:

Response.Clear();
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", url);
Response.End();

我应该在哪里进行重定向?

我看到两个选项:

Application_BeginRequest - 使用正则表达式解析 url

我喜欢它的地方:

  • 我已经在此处检查大写 url 以重定向到小写 url
  • 我有机会直接处理响应,而不必返回 ActionResult

我不喜欢它的地方:

  • 顶部的 URL 类型 #2 必须映射到新的 Controller / View ,这意味着我需要做一些数据库工作来获取 URL 的路径

Controller Actions - 使用路由和 Controller 进行重定向

我喜欢它的地方:

  • 我可以干净利落地完成我需要的数据库工作

我不喜欢它的地方:

  • Controller 需要返回一个 View ,我直接操作响应流来创建 301。

任何建议都很好,谢谢。

最佳答案

在这两个选择中,我会选择 Controller 操作。 不需要 Controller 返回 View ——我相信您甚至可以使用 ASP.NET MVC 使 Controller 方法返回 void。我喜欢这个选项的原因是因为数据库交互——我认为在 BeginRequest 中启动数据库会影响整体性能。

如果这不是问题,我认为将它与其余路由信息放在一起最有意义(即与 BeginRequest 一起)。

关于c# - asp.net mvc 遗留路由映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090220/

相关文章:

c# - 如何通过 .NET Framework 应用程序以编程方式检查我的计算机上安装的 .NET Core 运行时版本?

c# - ASP.NET MVC - 未找到 NLog 文件目标

asp.net-mvc - ASP.NET MVC "GET"和 "POST"常数

php - 显示不带扩展名的正确 URL,如果 URL 不正确则重定向

c++ - 重写这个循环

C#项目引用netcoreapp3.1中的F#类lib

c# - 访问 SD 卡被拒绝 - UWP

javascript - 更新 li 值变得未定义

用于 session 管理的 C++ 库?

c# - 无法找到正确的命名空间但已添加引用?