ASP.Net MVC 中静态文件的永久重定向旧路由

2024-03-19

我们旧的 ASP.net 站点将静态图像存储在根目录的子目录中,名为/images.

我们新的 ASP.net MVC 站点将这些图像存储在新的布局中/内容/图片

我已经更改了网站中的所有页面以适应新的文件夹结构,但我想设置从旧静态图像到新位置的永久重定向。

我们的网站是托管的,我无法控制 IIS,那么解决此问题的最佳方法是什么?


我对我的 MVC 2 网站使用以下代码:

// The legacy route class that exposes a RedirectActionName
public class LegacyRoute : Route
{
    public LegacyRoute(string url, string redirectActionName, IRouteHandler routeHandler)
        : base(url, routeHandler)
    {
        RedirectActionName = redirectActionName;
        Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index"}); // is not actually called
    }

    public string RedirectActionName { get; set; }
}

// The legacy route handler, used for getting the HttpHandler for the request
public class LegacyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        requestContext.HttpContext.Response.Write("success");
        return new LegacyHandler(requestContext);
    }
}

// The legacy HttpHandler that handles the request
public class LegacyHandler : MvcHandler
{
    public LegacyHandler(RequestContext requestContext) : base(requestContext)
    {
        requestContext.HttpContext.Response.Write("success");
        ProcessRequest(requestContext.HttpContext);
    }

    protected override void ProcessRequest(HttpContextBase httpContext)
    {
        string redirectActionName = ((LegacyRoute) RequestContext.RouteData.Route).RedirectActionName;
        var route = new Route(redirectActionName, ((LegacyRoute)RequestContext.RouteData.Route).Defaults, new MvcRouteHandler());

        // Copy all of the querystring parameters and put them within RouteContext.RouteData.Values
        var values = new Dictionary<string, object>();
        foreach (var s in RequestContext.RouteData.Values)
        {
            values.Add(s.Key, s.Value);
        }
        foreach (var s in httpContext.Request.QueryString.AllKeys)
        {
            values.Add(s, httpContext.Request.QueryString[s]);
        }
        var data = route.GetVirtualPath(RequestContext, new RouteValueDictionary(values));

        httpContext.Response.Status = "301 Moved Permanently";
        httpContext.Response.AppendHeader("Location", "/" + data.VirtualPath + "/");
        httpContext.Response.End();
    }
}

然后我只需将旧路线添加到我的路线图中:

routes.Insert(13, new LegacyRoute("search", "search/{query}", new LegacyRouteHandler()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.Net MVC 中静态文件的永久重定向旧路由 的相关文章

随机推荐

  • 将文本和容器置于圆圈内

    我这里有一个 Bootply http www bootply com XLGE6Vpjov http www bootply com XLGE6Vpjov 我需要将 3 个圆圈置于容器中 然后将其中的文本水平和垂直居中 如何使文本垂直居中
  • 获取模型或控制器中消化的 asset_path

    我有一个Article模型 它有一个字段svg path I use fabricjs绘制可以包含多篇文章且可修改的画布 我目前所做的是生成一个json包含文章的所有必需字段 包括svg path 当我尝试使用asset path帮手 ht
  • 如何使用 python boto3 将 s3 对象从一个存储桶复制到另一个存储桶

    我想将文件从一个 s3 存储桶复制到另一个 我收到以下错误 s3 meta client copy 源 目标 类型错误 copy 至少需要 4 个参数 给定 3 个 我无法通过阅读文档找到解决方案 这是我的代码 usr bin env py
  • madvise() 中 MADV_USERFAULT 标志的状态是什么?

    已经有一些讨论在 madvise 中使用新标志来告诉内核不要处理某些内存范围内的页面错误 lwn net 1 https lwn net Articles 615086 lwn net 2 https lwn net Articles 54
  • Google Drive SDK iOS 示例

    我按照Google Drive sdk的iOS示例教程中的步骤进行操作 https developers google com drive ios quickstart https developers google com drive i
  • paxos 与 raft 进行领导者选举

    读完paxos和raft paper后 我有以下困惑 paxos论文仅描述了单个日志条目的共识 相当于raft算法中的领导者选举部分 在raft的leader选举中 paxos的方式相对于简单的随机超时方式有什么优势呢 一个常见的误解是原始
  • 在 Eclipse 控制台中对日志进行着色

    有没有办法在 Eclipse 控制台中对部分日志进行着色 我知道我可以发送到错误和标准流并对它们进行不同的着色 但我更喜欢在 ANSI 转义代码 或任何其他 HTML 行中查找一些内容 我可以在字符串中嵌入颜色以使其在字符串中着色日志 它肯
  • 强制表单文本为小写

    我如何强制 用户名 文本中的文本input无论用户类型如何都小写 div class register div
  • 当区域控制器加载时,为什么我的 BaseController.User 值 == null ? [复制]

    这个问题在这里已经有答案了 我正在编写一个 Asp Net 核心应用程序 并且在获得导航访问权限之前让用户通过 Google 进行身份验证 当用户导航到我的 WorldBuilder 区域并点击 WorldController 时 Base
  • 两个具有相同名称和不同私钥的 iOS 分发证书的问题[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们有两个 iOS 发行版证书 我在签名时遇到一些问题 因为两个分发证书具有相同的名称 如果我添加两个证书并尝试使用其中一个证书进行签名
  • sqlite 选择日期条件

    我有一个带有出生日期的 sqlite 表 我想执行一个查询来选择年龄超过 30 岁的记录 我已经尝试过以下方法 但它不起作用 select from mytable where dob gt 1 Jan 1980 select from m
  • Django Rest Framework 在序列化之前更新数据

    我希望任何用户都可以使用我的 RESTful API 创建自己的产品 为此 我创建了一个继承ListCreateAPIView的视图 问题是用户应该只创建他 她拥有的产品 因此当创建 Product 模型的实例时 我希望字段 Owner 对
  • 如何为iMessage Sticker App网格贴纸提供不同尺寸

    我创建了一个 iOS iMessage 贴纸应用程序 根据苹果文档 我应该能够以三种不同尺寸之一显示贴纸 但是 无论我将贴纸图像设置为什么尺寸 300px x 300px 408px x 408px 618px x 618px 它们仅显示为
  • Golang 中的函数声明

    在 Golang 中声明函数似乎有两种不同的方式 如下所示 package main import fmt var someFunc func arg string fmt Println arg func main someFunc He
  • 如何在 ruby​​ 中进行 base58 编码?

    我正在尝试编码原型股 http protoshares net 原始格式的钱包地址 如中所述Bitcoin https en bitcoin it wiki Technical background of Bitcoin addresses
  • Jupyter 和 Common Lisp

    我正在尝试安装cl jupyter https github com fredokun cl jupyter common lisp 内核Jupyter http jupyter org 我无法让它工作 当我打开一个新的 lisp 笔记本
  • 如何将文本框中的日期插入数据库

    请帮助我将日期从文本框中以 dd mm yyyy 格式插入到 SQL Server 我的代码如下 int prio Convert ToInt32 Priority Text string stdate planstart Text str
  • 解析装饰器中的 args 和 kwargs

    我有一个需要 args 和 kwargs 的函数 我需要根据 args 和 kwargs 的值在我的装饰器中做一些事情2nd函数中的arg 如下面的代码所示 def workaround func def decorator fn def
  • 从 UWP 应用检查转储文件

    首先 我在 Windows 10 手机上启用转储文件的保存 设置 gt 更新和安全 gt 对于开发人员 gt 保存这么多故障转储 3 然后我调试了一个引发异常的应用程序 我停止后继续调试 断开并再次连接手机后 我能够访问存储在下的转储文件W
  • ASP.Net MVC 中静态文件的永久重定向旧路由

    我们旧的 ASP net 站点将静态图像存储在根目录的子目录中 名为 images 我们新的 ASP net MVC 站点将这些图像存储在新的布局中 内容 图片 我已经更改了网站中的所有页面以适应新的文件夹结构 但我想设置从旧静态图像到新位