2012-01-04 58 views
2

我正在使用此SO Question中详细介绍的解决方案。我以前在其他网站上使用过它,它的工作正常,并且它在我的开发盒上工作。但是,当我发布到我们的Windows VPS时,错误将返回标准的IIS错误页面。MVC3自定义错误页面在dev中工作,不在服务器上

我从来没有管理过一个网络服务器,我不知道我需要检查什么设置来弄清楚为什么它不返回我设置的自定义错误。我已经尝试设置应用程序的.net错误页面关闭和打开,默认页面设置为根网站,以及只是'/'。

我也尝试设置错误页面(7.5中的iis下)以定制和详细。

这些都不会对返回的错误页面有任何影响。我在这里做错了什么?

+0

是你看到了什么错误页面?这会让我们知道什么是错误。从那里可以找出接下来要尝试的设置。 – 2012-01-04 18:40:08

+0

它是标准iis错误页面。以下是我在谷歌上找到的一个示例:http://www.west-wind.com/Weblog/images/200901/WindowsLiveWriter/Response.TrySkipIisCustomErrors_9A81/ServerError500_5436e95f-b1b5-46eb-80ab-0769a875117d.png – Tyrsius 2012-01-04 18:42:15

回答

1

我记得有类似的问题,我加入这行代码

protected void Application_Error() 
{ 
var exc = Server.GetLastError(); 
var httpExc = exc as HttpException; 
Response.Clear(); 
Server.ClearError(); 
var routeData = new RouteData(); 
routeData.Values["controller"] = "Error"; 
routeData.Values["action"] = "General"; 
routeData.Values["exception"] = exc; 
Response.StatusCode = 500; 
if (httpExc != null) 
{ 
    Response.StatusCode = httpExc.GetHttpCode(); 
    routeData.Values["action"] = "Http404"; 
    routeData.Values["exception"] = httpExc; 
} 
Response.TrySkipIisCustomErrors = true; //this fixed it 
IController errorsController = new WWS_Website.Controllers.ErrorController(); 
var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
errorsController.Execute(rc); 

} 
+0

这是做到了,谢谢! – Tyrsius 2012-01-05 00:06:24

+0

我还发现这与在各种主机上的服务器上的部署相关:http://stackoverflow.com/q/1706934/964043 – dmarietta 2014-04-07 16:11:48

0

您可以使用web.config文件的system.webServer部分中的httpErrors部分替换标准的IIS错误页面。这是system.web中的customErrors部分的补充。

<system.webServer> 
    ... 
    <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL"> 
     <remove statusCode="400" subStatusCode="-1" /> 
     <error statusCode="400" prefixLanguageFilePath="" 
      path="/errors/400" responseMode="ExecuteURL" /> 
     <remove statusCode="404" subStatusCode="13" /> 
     <error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" 
      path="/errors/file-upload-too-large" responseMode="Redirect" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" 
      path="/errors/404" responseMode="ExecuteURL" /> 
     <remove statusCode="403" subStatusCode="-1" /> 
     <error statusCode="403" prefixLanguageFilePath="" 
      path="/errors/403" responseMode="ExecuteURL" /> 
    </httpErrors> 
+0

这不符合我正在使用的解决方案。请参阅链接的SO问题 – Tyrsius 2012-01-04 20:13:51

+0

您说这适用于您的开发机器,但不适用于IIS。在开发中,您是否使用IIS Express进行测试?还是卡西尼? – danludwig 2012-01-04 20:26:58

+0

我正在使用卡西尼 – Tyrsius 2012-01-04 21:15:34

相关问题