Http 500错误导致部署的MVC应用程序中出现空白页

时间:2014-05-30 12:40:54

标签: asp.net http

我在这里遇到了一些问题。我有一个已部署到Windows Server 2008上的IIS 7的MVC应用程序。在Visual Studio 2012中,每当发生内部服务器错误(即http 500)时,它都会显示我为其设计的页面。但是,当我将它部署到IIS时,它会显示一个空白页面,这可能非常烦人,因为根本看不到应用程序的页面。我只需要显示错误页面而不是当前显示为客户端站点中已部署应用程序的空白页面。然后我可以在Visual Studio中修复错误。如果我违反S.O的任何规则,请原谅我。

以下是我在ErrorController.cs中设置的内容

public ActionResult ForbiddenPage()
{ 
    Response.StatusCode = 403;
    Response.TrySkipIisCustomErrors = true; // add this line
    return View();
}
//
// GET: /Error/

public ActionResult PageNotFound()
{ 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true; // add this line
    return View();
}

//
// GET: /Error/

public ActionResult InternalServerError()
{ 
    Response.StatusCode = 500;
    Response.TrySkipIisCustomErrors = true; // add this line
    return View();
}

在web.config中,这就是我所拥有的:

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." ...
</handlers>
<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="403" />
  <error statusCode="403" responseMode="ExecuteURL" path="/Error/ForbiddenPage" />
  <remove statusCode="404" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/PageNotFound" />
  <remove statusCode="500" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/InternalServerError"/>
</httpErrors>
</system.webServer>

我的RouteConfig.cs看起来像这样

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
 defaults: new { controller = "Home", action = "LogIn",id = UrlParameter.Optional } 

    );

    routes.MapRoute(
        "403-ForbiddenPage",
        "{*url}",
        new { controller = "Error", action = "ForbiddenPage" }
    );
    routes.MapRoute(
        "404-PageNotFound",
        "{*url}",
        new { controller = "Error", action = "PageNotFound" }
    );
    routes.MapRoute(
        "500-InternalServerError",
        "{*url}",
        new { controller = "Error", action = "InternalServerError" }
    );

应显示的视图如下:

@{
    ViewBag.Title = "Internal Server Error"; 
    Layout = "~/Views/Shared/_LayoutError.cshtml"; 
}

<h2></h2>

<div class="list-header clearfix">
    <span>Internal Server Error</span>
</div>
<div class="list-sfs-holder">
  <div class="alert alert-error">
    An unexpected error has occurred.... click<a href ="/Home/LogIn"><i><u>here</u></i>

</a> to login again..
  </div> 
</div>    

如果有任何我应该包含的东西来帮助您提供解决方案,请在评论中告诉我。

2 个答案:

答案 0 :(得分:0)

是的,我找到了解决方案, 谢谢ppittle,你与Kev的回答有关。我在答案中尝试了这个建议,但它在我的场景中没有用。但是,Kev在答案中发布的链接帮助很多。有效的是生产服务器[IIS所在的]中的applicationHost.config中的设置。

在此位置查找名为applicationHost.config的文件: C:\ Windows \ System32下\ INETSRV \配置

将下面的“overrideModeDefault”设置从Deny更改为Allow。

这对我有用。谢谢StackOverflow!

答案 1 :(得分:0)

我有同样的问题,但在任何地方都没有看到这个答案:

我的应用程序运行的用户没有访问web.config中配置的数据库的权限。没有迹象表明这是我能找到的问题。

我发现这种方式的方法是在DEBUG而不是Release中部署,然后向我显示错误消息。