这是我在Global.asax中删除/ Home:
的路线 routes.MapRoute("Root", "{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我需要设置301重定向,因为有人链接到/ Home并且他们获得了404。
那么如何设置301?
我检查了路线的设置方式,并在“Home”控制器中寻找“Home”动作方法。
显然我可以补充一下:
public ActionResult Home() {
Response.Status = "301 Moved Permanently";
Response.RedirectLocation = "/";
Response.End();
return Redirect("~/");
}
然而,要做到这一点还有更好的方法吗?
答案 0 :(得分:8)
如果您想允许此网址,则可以执行
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);
}
}
然后路线(现在应该在所有路线的底部)将是:
routes.MapRoute("Root", "{controllerName}",
new { controller = "Redirector", action = "Redirect",
controllerName = "Home", actionName = "Index" });
因此,它将尝试重定向到与/ name同名的控制器的Index操作。明显的限制是动作的名称和传递参数。你可以在它上面开始构建。