Как заставить MVC3 выдавать меньше информации об ошибках - PullRequest
1 голос
/ 24 февраля 2012

По умолчанию приложение MVC3 выдает МНОГО информации для 404-х, недопустимых глаголов, маршрута не найден и т. Д. У него есть эта страница с очень подробной ошибкой.

Как мы можем изменить это поведение , чтобы клиент по-прежнему получал 404 и все остальное, но без возврата такого рода вещей? ( ОСОБЕННО , что внизу, которое отображает информацию о нашей частной структуре, имена классов и т. Д.)

<html>
    <head>
        <title>The resource cannot be found.</title>
        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>The resource cannot be found.</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. &nbsp;Please review the following URL and make sure that it is spelled correctly.
            <br><br>

            <b> Requested URL: </b>/Foo<br><br>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.225

            </font>

    </body>
</html>
<!-- 
[HttpException]: A public action method &#39;Index&#39; was not found on controller &#39;MySystem.Api.Rest.Controllers.MyController&#39;.
   at System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   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.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

См. Шаг 9, чтобы включить режим розничной торговли.

В шаблоне MVC по умолчанию включены пользовательские ошибки.

Единственный способ включить это - включить розничный режим. Это включит пользовательские ошибки для КАЖДОГО сайта на вашем компьютере.

https://kevww.wordpress.com/tag/mvc/

В основном просто зайдите в ваш machine.config и установите его там. (ex c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config)

<system.web>  <deployment retail="true" /></system.web>

Также установите ELMAH, чтобы автоматически регистрировать ваши ошибки (регистрировать их).

http://code.google.com/p/elmah/wiki/MVC

1 голос
/ 24 февраля 2012

Вы можете установить compilition debug="false" в web.config.

Если вы хотите это для всех сайтов, размещенных в iis, вы можете установить retail mode=true в machine.config

Если вы хотите показать пользовательскую страницу ошибки, вы можете переопределить HttpErrors раздел в web.config.

0 голосов
/ 24 февраля 2012

Переопределите OnException метод в ваших контроллерах и покажите все, что вы хотите пользователю при ошибке (включая, например, ваш собственный стиль страницы и т. Д.).

Например, см. http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...