我正在开发Asp.net mvc3应用程序。对于异常处理我在global.asax中使用以下代码
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
Server.ClearError();
Response.Redirect("/Secure/Error", false);
}
如果发生任何异常,它将重定向到错误页面。我想要一些异常不应该重定向到错误页面。
如果有任何用户输入以下网址
www.example.com/index
没有'索引'名称的控制器,它将抛出异常
未找到或未实现路径'/ index'的控制器 一个IController
我希望在发生此异常时将其重定向到 www.example.com
我该怎么做?
还有一些其他关键字,例如索引.. ,应该重定向到网站的主网址
答案 0 :(得分:1)
如果您只想为特定关键字执行此操作,为什么不添加相应的路由而不是处理 404 - Not Found 例外?
您可以在 Globals.asax.cs 文件中执行此操作,旁边是其他路径定义:
routes.MapRoute(
"IndexRoute", // Route name
"index", // URL
new { controller = "Home", action = "RedirectToRoot" }
);
同样适用于索引以外的所有关键字。
在创建 / index 之后,其他网址指向HomeController.RedirectToRoot()
(或您选择的其他控制器/操作),只需实现它以返回一个RedirectResult,该用户将用户带到网站的根目录:
public RedirectResult RedirectToRoot()
{
return RedirectToAction("Index", "Home");
}
如果你完全确定你永远不会使用 / index 或其他特殊网址,除了重定向到root,那么你可以改为永久重定向:
return RedirectToActionPermanent("Index", "Home");
这将节省一些到服务器的往返,但重定向将永久存储在客户端浏览器中,这使得将来很难/不可能将这些URL用于其他任何内容。