gpt4 book ai didi

asp.net-mvc - 我如何 301 重定向/主页到 root?

转载 作者:行者123 更新时间:2023-12-04 19:43:39 24 4
gpt4 key购买 nike

这是我在 Global.asax 中删除/Home 的路线:

    routes.MapRoute("Root", "{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

好吧,我需要设置一个 301 重定向,因为有人链接到/Home 并且他们得到了 404。

那么如何设置 301?

我检查了路由的设置方式,它正在“Home” Controller 中寻找“Home”操作方法。

显然我可以添加:

public ActionResult Home() {
Response.Status = "301 Moved Permanently";
Response.RedirectLocation = "/";
Response.End();
return Redirect("~/");
}

但是,一定有更好的方法来做到这一点吧?

最佳答案

如果你想允许这个 URL,你可以这样做

routes.MapRoute("Root", "Home",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });

但是你想要重定向,它确实最有意义,所以......

您可以做的另一件事是创建另一个 Controller 重定向器和一个操作主页。

public class RedirectorController : Controller
{
public ActionResult Home()
{
return RedirectPermanent("~/");
}
}

然后将路由设置为:

routes.MapRoute("Root", "Home",
new { controller = "Redirector", action = "Home"});

请记住将路由添加到路由的顶部,这样通用路由就不会匹配。

更新:

您可以做的另一件事是将其添加到路线的末尾:

routes.MapRoute("Root", "{controller}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });

但这还不是重定向。因此,可以将重定向器更改为通用的...

public class RedirectorController : Controller
{
public ActionResult Redirect(string controllerName, string actionName)
{
return RedirectToActionPermanent(actionName, controllerName);
}
}

然后路线(现在应该在所有路线的底部)将是:

routes.MapRoute("Root", "{controllerName}",
new { controller = "Redirector", action = "Redirect",
controllerName = "Home", actionName = "Index" });

因此,它将尝试重定向到与/name 同名的 Controller 的 Index 操作。明显的限制是操作的名称和传递的参数。您可以在此基础上开始构建。

关于asp.net-mvc - 我如何 301 重定向/主页到 root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072925/

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