[iis-7] El "mensaje" de WebApi ("se ha producido un error") en IIS7, no en IIS Express


Answers

Básicamente:

Use IncludeErrorDetailPolicy en su lugar si CustomErrors no lo resuelve (por ejemplo, si su stack de ASP.NET es> 2012):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Nota: Tenga cuidado al devolver la información detallada del error para revelar información confidencial a los 'hackers'. Vea el comentario de Simon sobre esta respuesta a continuación.

TL; versión DR

Para mí CustomErrors realmente no me ayudó. Ya estaba configurado en Off , pero todavía recibí un miserable mensaje de an error has occurred . Supongo que la respuesta aceptada es de hace 3 años, que es mucho tiempo en la palabra web hoy en día. Estoy usando Web API 2 y ASP.NET 5 (MVC 5) y Microsoft se ha alejado de una estrategia IIS-only, mientras que CustomErrors es old skool IIS;).

De todos modos, tuve un problema en la producción que no tenía localmente. Y luego descubrí que no podía ver los errores en la pestaña Red de Chrome como pude en mi máquina de desarrollo. Al final, logré resolverlo instalando Chrome en mi servidor de producción y luego navegando hacia la aplicación allí en el servidor mismo (por ejemplo, en 'localhost'). Luego aparecieron errores más detallados con rastros de pila y todo.

Solo después encontré este artículo de Jimmy Bogard (Nota: ¡Jimmy es el Sr. AutoMapper! ). Lo curioso es que su artículo es también de 2012, pero en él ya explica que CustomErrors ya no ayuda con esto, pero que PUEDE cambiar el 'Detalle de error' configurando una IncludeErrorDetailPolicy diferente en la configuración global de WebApi (por ej. WebApiConfig.cs ):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Afortunadamente, también explica cómo configurarlo para que webapi (2) CustomErrors escuche la configuración de CustomErrors . Ese es un enfoque bastante sensato, y esto te permite volver al 2012: P.

Nota: El valor predeterminado es 'LocalOnly', lo que explica por qué pude resolver el problema de la manera que describí antes de encontrar esta publicación. Pero entiendo que no todo el mundo puede simplemente controlar remotamente la producción y poner en marcha un navegador (sé que en su mayoría no podría hasta que decidí ir a un programa independiente AND DevOps).

Question

Estoy trabajando con ASP.NET MVC 4 WebApi y estoy divirtiéndome mucho al ejecutarlo en mi computadora local en IIS Express. También configuré IIS Express para que funcione en máquinas remotas, por lo que otras personas de mi empresa utilizan mi computadora como servidor web.

Después de decidir que esta era una solución menos que óptima, decidimos poner WebApi en un servidor remoto después de instalar .NET 4.5. Cuando uso fiddler y envío un POST a un controlador en mi máquina local, devuelve la respuesta correcta, pero cuando cambio el dominio al servidor web que ejecuta IIS7, el mismo POST devuelve un críptico

{"mensaje": "ha ocurrido un error"}

mensaje. ¿Alguien tiene alguna idea de lo que podría estar pasando?




Ninguna de las otras respuestas funcionó para mí.

Esto hizo: (en Startup.cs)

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();

        WebApiConfig.Register(config);

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}

(o puede colocarlo en WebApiConfig.cs):

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}



En caso de que esto ayude a alguien:

Tuve un problema similar, y siguiendo las instrucciones de Nates, agregué:

<system.web>
     <customErrors mode="Off"/>
 </system.web>

esto me mostró más información sobre el error:

"ExceptionMessage": "No se puede cargar el recurso de metadatos especificado.", "ExceptionType": "System.Data.Entity.Core.MetadataException", "StackTrace": "en System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource .LoadResources (...

Esto fue cuando recordé que había movido el archivo edmx a una ubicación diferente y había olvidado cambiar el nodo connectionstrings en la configuración (el nodo connectionsstrings se colocó en un archivo separado usando "configSource", pero esa es otra historia).






Related