Estoy trabajando con ASP.NET MVC 4 WebApi y me divierto mucho ejecutándolo en mi computadora local en IIS Express. También configuré IIS Express para dar servicio a máquinas remotas, por lo que otras personas de mi empresa están usando mi computadora como nuestro servidor web.
Después de decidir que esta era una solución menos que óptima, decidimos colocar el WebApi en un servidor remoto después de instalar .NET 4.5. Cuando uso el violinista y envío una POST a un controlador en mi máquina local, devuelve la respuesta correcta, pero cuando cambio el dominio al servidor web que ejecuta IIS7, la misma POST devuelve un mensaje críptico
{"mensaje": "se ha producido un error"}
mensaje. Alguien tiene alguna idea de lo que podría estar pasando?
Respuestas:
El problema era una dependencia faltante que no estaba en el servidor pero estaba en mi máquina local. En nuestro caso, fue un dll Devart.Data.Linq.
Para llegar a esa respuesta, activé el rastreo de IIS para 500 errores. Eso proporcionó un poco de información, pero lo realmente útil fue en la configuración de web.config
<system.web><customErrors mode="Off"/></system.web>
Esto apuntó a una dependencia cargada dinámicamente que falta. Después de agregar esta dependencia y decirle que se copie localmente, el servidor comenzó a funcionar.fuente
mode="RemoteOnly"
y si ejecuta la página en un navegador web en el servidor, también verá los errores sin comprometer la seguridad si el resto del sitio es accesible externamenteBásicamente:
Use
IncludeErrorDetailPolicy
en su lugar siCustomErrors
no lo resuelve por usted (por ejemplo, si su pila ASP.NET es> 2012):Nota: Tenga cuidado al devolver información detallada del error puede 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 ayudó. Ya estaba configurado enOff
, pero todavía recibí unan error has occurred
mensaje miserable . Supongo que la respuesta aceptada es de hace 3 años, que es mucho tiempo en la web hoy en día. Estoy usando Web API 2 y ASP.NET 5 (MVC 5) y Microsoft se ha alejado de una estrategia solo de IIS, mientras queCustomErrors
es viejo 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 podía en mi máquina de desarrollo. Al final logré resolverlo instalando Chrome en mi servidor de producción y luego buscando la aplicación allí en el servidor (por ejemplo, en 'localhost'). Luego aparecieron errores más detallados con trazas de pila y todo.
Solo después encontré este artículo de Jimmy Bogard (Nota: ¡Jimmy es el señor AutoMapper! ). Lo curioso es que su artículo también es de 2012, pero en él ya explica que
CustomErrors
ya no ayuda para esto, pero que PUEDE cambiar el 'Detalle de error' configurando una configuración diferenteIncludeErrorDetailPolicy
de WebApi global (por ejemploWebApiConfig.cs
):Afortunadamente, también explica cómo configurarlo para que webapi (2) escuche tu
CustomErrors
configuración. Es un enfoque bastante sensato, y le permite volver a 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 remotamente a la producción y al inicio de un navegador (sé que en su mayoría no podría hasta que decidí hacerme freelance y DevOps).
fuente
if (DateTime.Now < new DateTime(2017, 6, 22)) { .... }
para establecer una opción como esta. Entonces puedo probarlo en producción y mañana volverá mágicamente a su comportamiento normal si olvido deshabilitarlo.Ninguna de las otras respuestas funcionó para mí.
Esto hizo: (en Startup.cs)
(o puede ponerlo en WebApiConfig.cs):
fuente
Siempre llego a esta pregunta cuando llego a un error en el entorno de prueba y recuerdo: "Lo he hecho antes, pero puedo hacerlo directamente en web.config sin tener que modificar el código y volver a implementarlo en el entorno de prueba , pero se necesitan 2 cambios ... ¿qué fue de nuevo? "
Para futura referencia
Y
fuente
Tuve un problema similar al publicar en el punto final de WebAPI. Al desactivar CustomErrors = Off, pude ver el error real, que es uno de los dlls faltantes.
fuente
En caso de que esto ayude a alguien:
Tuve un problema similar y, siguiendo las instrucciones de Nates, agregué:
Esto me mostró más información sobre el error:
Esto es cuando recordé que había movido el archivo edmx a una ubicación diferente y me había olvidado de cambiar el nodo de cadenas de conexiones en la configuración (el nodo de cadenas de conexiones se colocó en un archivo separado usando "configSource", pero esa es otra historia).
fuente
Mi archivo XML swagger no se implementó en \ bin:
http://wmpratt.com/swagger-and-asp-net-web-api-part-1/
Tenía que establecerse en la Configuración de lanzamiento, así como en la Configuración de depuración.
fuente
Si tiene
<deployment retail="true"/>
en machine.config de .NET Framework, no verá mensajes de error detallados. Asegúrese de que la configuración sea falsa o no esté presente.fuente
Así que probé todas las soluciones sugeridas en vano. Todo lo que hice fue configurar la aplicación desde el servidor y mostró el error completo, esto debería haber funcionado cuando configuré el modo customErrors en falso, pero no fue así. En el momento en que examiné la API del servidor, pude ver el problema.
fuente