2

我正在开发 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 '名称的控制器,它将抛出异常

找不到路径“/index”的控制器或未实现 IController

我想要这个当这个异常发生时它应该重定向到www.example.com

我怎样才能做到这一点?

还有一些其他关键字,如index..应该重定向到网站的主 url

4

1 回答 1

1

如果您只想对特定关键字执行此操作,为什么不添加相应的路由而不是处理404 - Not Found异常?

您可以在Globals.asax.cs文件中执行此操作,在其他路由定义旁边:

routes.MapRoute(
    "IndexRoute", // Route name
    "index", // URL 
    new { controller = "Home", action = "RedirectToRoot" }
    );

同样适用于除index以外的所有关键字。

更新

在使/index和其他 url 指向HomeController.RedirectToRoot()(或您选择的另一个控制器/动作)之后,只需实现它以返回一个 RedirectResult 将用户带到站点的根目录:

public RedirectResult RedirectToRoot()
{
    return RedirectToAction("Index", "Home");
}

更新 2

如果您绝对确定除了重定向到 root 之外,您永远不会使用/index或其他特殊 url,那么您可以改为执行永久重定向:

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

This will save some round trips to the server, but the redirection will be permanently stored in client browsers, making it very hard/impossible to use those urls for anything else in the future.

于 2013-02-19T15:14:09.923 回答