2016-08-04 64 views
0

我工作的代理機構有一位客戶在其網站上經常遇到錯誤。例如,整天隨機,網站會遇到許多不同的運行時錯誤,通常與郵件處理程序有關。當出現腳本錯誤時自動顯示維護頁面

現在,客戶正在不同的平臺上重建系統,但同時我們希望自動維護頁面在網站停機時進行標記。

目前,錯誤代碼讀取這樣的事情:

[NullReferenceException: Object reference not set to an instance of an object.] 
    ASP._Page_Views_Shared__Layout_cshtml.Execute() in path\to\_Layout.cshtml:18 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198 
    System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +90 
    System.Web.WebPages.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer) +230 
    System.Web.WebPages.HelperResult.WriteTo(TextWriter writer) +10 
    System.Web.WebPages.WebPageBase.Write(HelperResult result) +80 
    System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +64 
    System.Web.WebPages.WebPageBase.PopContext() +262 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +98 
    System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +257 
    System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13 
    System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +245 
    System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +22 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +176 
    System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +75 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +99 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9658236 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

我們要的是出現,取決於是否有錯誤消失一個自動的,基於HTML的錯誤頁面。

我設想的方式是新的索引頁面首先會查詢網站的主頁面,如果沒有錯誤顯示它,或者如果存在錯誤則禁用維護模式頁面。

我希望這是有道理的。

是否有可能在ASP.NET框架內實現這一點?

該網站正在使用v2.0.50727。

欣賞任何幫助你們可以給。

回答

0

您可以在以下行添加到web.config文件中的System.Web節點:

<customErrors mode="On" defaultRedirect="~/errorPage.html" redirectMode="ResponseRewrite"></customErrors>

0

如果你想要做的是,只要任何類型的未處理的異常在你的應用程序中出現的用戶重定向到您的自定義錯誤頁,你可以使用Global.asax中,將用戶重定向這樣的:

protected void Application_Error() 
{ 
    Exception exception = Server.GetLastError(); 
    Response.Clear(); 

    // clear error on server 
    Server.ClearError(); 

    var httpContext = HttpContext.Current; 
    if (httpContext != null) 
     httpContext.Response.Redirect("~/MyCustomErorPage.html"); 
} 

理想情況下,您應該通過實現HandleErrorAttribute.OnException或Controller.OnException,記錄excepton以及從那裏重定向用戶來處理異常。

如果你想要一個快速和骯髒的解決方案(因爲它似乎你已經知道異常的原因),Global.asax解決方案應該實現你所要求的。

相關問題