如何处理'路径' /索引'的控制器没有找到或没有实现IController'在asp.net mvc?

时间:2013-02-19 15:07:35

标签: c# asp.net-mvc-3 exception-handling

我正在开发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

我该怎么做?

还有一些其他关键字,例如索引.. ,应该重定向到网站的主网址

1 个答案:

答案 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");
}

更新2

如果你完全确定你永远不会使用 / index 或其他特殊网址,除了重定向到root,那么你可以改为永久重定向:

return RedirectToActionPermanent("Index", "Home");

这将节省一些到服务器的往返,但重定向将永久存储在客户端浏览器中,这使得将来很难/不可能将这些URL用于其他任何内容。