我有以下代码处理在操作结果之外发生的所有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过滤器拾取。调试后,我可以清楚地看到它正在寻找以下路径。
我正在使用Razors视图引擎以及区域。我这样做的原因。所以我可以保持我的应用程序整洁。我的问题是看起来我被迫在我的应用程序中创建一个目录,所以这个文件可以放在它里面...我不是这个的粉丝。
我宁愿选择去以下地点。
或类似......
现在我 CAN 通过在应用程序的根目录创建该目录来解决此问题。
我没有这样做的原因是因为如果我开始尝试并使用简单的出路方法。我的应用程序将很快变得非常混乱。我喜欢成为定义文件和文件夹所在位置的人。
如果有人知道设置直接路径的方法,或者告诉IController(错误控制器)查看已经实例化的区域,我将永远爱你。
非常感谢任何帮助。
史蒂夫