地狱,
我有我的mvc应用程序错误处理配置在下面的简化方式(
全局.asax
):
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "General");
routeData.Values.Add("exc", exception);
Server.ClearError();
using (ErrorController errorController = new ErrorController())
{
((IController)errorController).Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
}
上面,我正在为控制器动态创建路由。它很有用,因为我可以将异常对象传递给控制器操作。这只是上面显示的简化版本,因为通常我会为各种异常类型创建不同的路由。我有
不
为函数中的错误处理而定义的静态路由
. 此函数未被触及:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = ""}
);
}
我的简化控制器如下所示:
public class ErrorController : Controller
{
public ActionResult General(Exception exc)
{
ViewData["ErrorDetails"] = exc.ToString();
return View("Error");
}
}
假设我有一个容易出错的站点:
http地址://
/应用程序/站点/wtf
.
当我在本地测试错误处理时,一切正常。
误差控制器
总则
这个动作
错误
查看。
但是当我从另一个主机调用这个容易出错的站点时,例如,应用程序部署在nice.host.org网站服务器:
http地址://
nice.host.org网站
/应用程序/站点/wtf
,
我得到了这样的例外:
System.InvalidOperationException: The view 'Error' or its master was not found. The following locations were searched:
~/Views/DynamicPage/Error.aspx
~/Views/DynamicPage/Error.ascx
~/Views/Shared/Error.aspx
~/Views/Shared/Error.ascx
~/Views/DynamicPage/Error.cshtml
~/Views/Shared/Error.cshtml
at System.Web.Mvc.ViewResult.FindView(ControllerContext context)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
更新
我会提供一些额外的信息以防万一。
我在用
razor视图引擎
. 在的“属性”窗口中
错误.cshtml
查看文件,我已尝试设置
构建操作
没有
内容
当涉及到主页面部分时web.config文件文件,如下所示:
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="MvcSiteMapProvider.Web.Html" />
</namespaces>
</pages>
在第二个web.config文件:
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
任何线索我都会感激的。