gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:52:03 24 4
gpt4 key购买 nike

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

我们新的 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()));

关于asp.net - ASP.Net MVC 中静态文件的永久重定向旧路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com