Como sobrescrever a seção HttpErrors no Web.Config - ASP.NET MVC3

10

Estou tentando adicionar páginas custon 404 conforme a resposta desta pergunta

Manipulação da ASP.NET MVC 404 e IIS7 < httpErrors >

adicionando

<httpErrors existingResponse="PassThrough" />

sob <system.webServer> tag no meu arquivo Web.Config.

Mas estou recebendo o seguinte erro

Module: CustomErrorModule 
Notification: SendResponse 
Handler: System.Web.Mvc.MvcHandler 
Error Code: 0x80070021 
Config Error: This configuration section cannot be used at this path. 
              This happens when the section is locked at a parent level. 
              Locking is either by default (overrideModeDefault="Deny"), 
              or set explicitly by a location tag with overrideMode="Deny" 
              or the legacy allowOverride="false".  


 Config Source
  153:       <httpErrors existingResponse="PassThrough" />
  154:   </system.webServer>

Eu também tentei substituir o bloqueio com base em link (Tarefa 2)

adicionando tag de localização no Web.config

da seguinte forma

<configuration>
....
....

  <location  allowOverride="true">
        <system.webServer>
            <httpErrors existingResponse="PassThrough" />
        </system.webServer>
  </location>
</configuration>

mas estou recebendo o mesmo erro.

Como devo configurar o elemento httpErrors no Web.config para que funcione

Estou usando o IIS 7, o VS 2010, o ASP.NET MVC3

Atualização:

Eu posso me livrar do erro bloqueado

se eu modificar o arquivo applicationHost.config e alterar

isto

<section name="httpErrors" overrideModeDefault="Deny" />

para

<section name="httpErrors" overrideModeDefault="Allow" />

mas o ideal é que eu não queira alterar o arquivo applicationHost.config e deseja substituí-lo do arquivo Web.config

    
por N30 17.05.2011 в 17:57
fonte

1 resposta

3

Se estiver interessado, você pode criar um tratamento de erros personalizado a partir do seu Global.asax.cs:

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;
                IController errorsController = new WWS_Website.Controllers.ErrorController();
                var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
                errorsController.Execute(rc);

        }

Controlador:

public ActionResult General(Exception exception)
{
  return View(exception);
}

public ActionResult Http404(Exception exception)
{
  return View(exception);
}

Você pode ter diferentes visualizações para cada erro. Você também pode enviar e-mails deste método do controlador para sua conta de e-mail do webmaster - muito útil.

    
por Hubert Jarema 06.12.2011 / 17:32
fonte