控制处理Application_Error视图的路径

时间:2013-10-08 13:42:02

标签: asp.net-mvc error-handling handleerror

我有以下代码处理在操作结果之外发生的所有execptions(HandleErrorAttribute无法到达的地方)。

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();

        Response.Clear();

        HttpException httpException = (HttpException)exception;

        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");

        if (httpException == null)
        {
            routeData.Values.Add("action", "Home");
        }
        else //It's an Http Exception, Let's handle it.
        {
            routeData.Values.Add("action", "Handle");
        }

        // Pass exception details to the target error View.
        routeData.Values.Add("error", httpException);

        // Clear the error on server.
        Server.ClearError();

        // Avoid IIS7 getting in the middle
        Response.TrySkipIisCustomErrors = true;

        // Call target Controller and pass the routeData.
        IController errorController = new SPP.Areas.UI.Controllers.ErrorController();
        errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    }

这项工作做得很好。它就像我设置它一样在“错误”控制器上执行“处理”操作。没问题。

当在操作内部时,它会抛出另一个异常,然后由我的HandleErrorAttribute过滤器拾取。调试后,我可以清楚地看到它正在寻找以下路径。

  • 〜/查看/错误/ Handle.aspx
  • 〜/查看/错误/ Handle.ascx
  • 〜/查看/共享/ Handle.aspx
  • 〜/查看/共享/ Handle.ascx
  • 〜/查看/错误/ Handle.cshtm
  • 〜/查看/错误/ Handle.vbhtml
  • 〜/查看/共享/ Handle.cshtml
  • 〜/查看/共享/ Handle.vbhtml

我正在使用Razors视图引擎以及区域。我这样做的原因。所以我可以保持我的应用程序整洁。我的问题是看起来我被迫在我的应用程序中创建一个目录,所以这个文件可以放在它里面...我不是这个的粉丝。

我宁愿选择去以下地点。

  • 〜/地区/ UI /查看/错误/ Handle.cshtml

或类似......

  • 〜/地区/共享/查看/错误/ Handle.cshtml

现在我 CAN 通过在应用程序的根目录创建该目录来解决此问题。

我没有这样做的原因是因为如果我开始尝试并使用简单的出路方法。我的应用程序将很快变得非常混乱。我喜欢成为定义文件和文件夹所在位置的人。

如果有人知道设置直接路径的方法,或者告诉IController(错误控制器)查看已经实例化的区域,我将永远爱你。

非常感谢任何帮助。

史蒂夫

0 个答案:

没有答案