Asp.net mvc 如何将301重定向/主页到根目录?
以下是我在Global.asax中删除/主页的路径:Asp.net mvc 如何将301重定向/主页到根目录?,asp.net-mvc,asp.net-mvc-routing,http-status-code-301,Asp.net Mvc,Asp.net Mvc Routing,Http Status Code 301,以下是我在Global.asax中删除/主页的路径: routes.MapRoute("Root", "{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 我需要设置301重定向,因为有人链接到了/Home,他们得到了404 那么如何设置301呢 我检查了路由设置的方式,它正在“主”控制器中寻找“主”操作方法 因此,显然我可以补充:
routes.MapRoute("Root", "{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我需要设置301重定向,因为有人链接到了/Home,他们得到了404
那么如何设置301呢
我检查了路由设置的方式,它正在“主”控制器中寻找“主”操作方法
因此,显然我可以补充:
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 });
但是你需要重定向,而且这是最有意义的,所以
您可以做的另一件事是创建另一个控制器重定向器和操作主页
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);
}
}
然后路线(现在应位于所有路线的底部)将为:
因此,它将尝试重定向到与/name同名的控制器的索引操作。明显的限制是操作的名称和传递的参数。你可以在上面开始构建。太有趣了,当你键入此内容时,我正在编辑我的“问题”,并提出了同样的问题。你知道为什么指向Url.Action(“索引”、“主页”)的链接现在会显示为:如果在更新中选择了最后一条路径,你确定你将其添加到了最底部吗?我已经修复了它。我还发现,只需创建一个链接,确保在controllerName变量上使用双引号,否则它将无法构建。MapRoute(“根“,”{controllerName}),新的{controller=“Redirector”,action=“Redirect”,controllerName=“Home”,actionName=“Index”});
routes.MapRoute("Root", "{controllerName}",
new { controller = "Redirector", action = "Redirect",
controllerName = "Home", actionName = "Index" });