Estou trabalhando com o ASP.NET MVC 4 WebApi e estou me divertindo muito executando-o no meu computador local no IIS Express. Eu configurei o IIS Express para servir máquinas remotas também, e outras empresas da minha empresa estão usando meu computador como nosso servidor da web.
Depois de decidir que essa era uma solução abaixo do ideal, decidimos colocar o WebApi em um servidor remoto depois de instalar o .NET 4.5. Quando eu uso o violinista e enviei um POST para um controlador na minha máquina local, ele retornará a resposta correta; mesmo assim, quando altero o domínio para o servidor da Web que executa o IIS7, o mesmo POST retorna um encriptado
{"message": "ocorreu um erro"}
mensagem. Alguém tem alguma idéia do que poderia estar acontecendo?
Respostas:
O problema era uma dependência ausente que não estava no servidor, mas estava na minha máquina local. No nosso caso, era uma dll Devart.Data.Linq.
Para chegar a essa resposta, ativei o rastreamento do IIS para 500 erros. Isso forneceu um pouco de informação, mas a coisa realmente útil foi na configuração do web.config na opção
<system.web><customErrors mode="Off"/></system.web>
This, que apontava para uma dependência carregada dinamicamente. Depois de adicionar essa dependência e solicitar que ela seja copiada localmente, o servidor começou a funcionar.fonte
mode="RemoteOnly"
e se você executar a página em um browser no servidor, você também vai ver os erros sem comprometer a segurança, se o resto do site é acessível externamenteBasicamente:
Em
IncludeErrorDetailPolicy
vez disso, use seCustomErrors
não resolver o problema para você (por exemplo, se você tiver uma pilha do ASP.NET> 2012):Nota: Tenha cuidado ao retornar informações detalhadas de erro, que podem revelar informações confidenciais a 'hackers'. Veja o comentário de Simon sobre esta resposta abaixo.
Versão TL; DR
Para mim
CustomErrors
, realmente não ajudou. Já estava definido comoOff
, mas eu ainda só recebi umaan error has occurred
mensagem fraca . Eu acho que a resposta aceita é de 3 anos atrás, que é um longo tempo na palavra web hoje em dia. Estou usando a API da Web 2 e o ASP.NET 5 (MVC 5) e a Microsoft se afastou de uma estratégia somente do IIS, enquanto oCustomErrors
velho skool do IIS;).Enfim, tive um problema de produção que não tinha localmente. E então descobri que não conseguia ver os erros na guia Rede do Chrome como na máquina de desenvolvimento. No final, consegui resolver o problema instalando o Chrome no meu servidor de produção e depois navegando até o aplicativo no próprio servidor (por exemplo, em 'localhost'). Em seguida, erros mais detalhados apareceram com rastreamentos de pilha e tudo.
Só depois encontrei este artigo de Jimmy Bogard (Nota: Jimmy é o Sr. AutoMapper! ). O engraçado é que o artigo dele também é de 2012, mas ele já explica que
CustomErrors
não ajuda mais nisso, mas que você PODE alterar o 'Detalhe do erro' definindo um diferenteIncludeErrorDetailPolicy
na configuração global da WebApi (por exemploWebApiConfig.cs
):Felizmente, ele também explica como configurá-lo para que o webapi (2) escute suas
CustomErrors
configurações. Essa é uma abordagem bastante sensata, e isso permite que você volte a 2012: p.Nota: O valor padrão é 'LocalOnly', o que explica por que consegui resolver o problema da maneira que descrevi antes de encontrar esta postagem. Mas eu entendo que nem todo mundo pode apenas remotamente produzir e iniciar um navegador (eu sei que quase não consegui até que decidi me tornar freelancer e DevOps).
fonte
if (DateTime.Now < new DateTime(2017, 6, 22)) { .... }
definir uma opção como esta. Então eu posso testá-lo em produção e amanhã ele voltará magicamente ao comportamento normal se eu esquecer de desativá-lo.Nenhuma das outras respostas funcionou para mim.
Isso aconteceu: (em Startup.cs)
(ou você pode colocá-lo em WebApiConfig.cs):
fonte
Eu sempre chego a essa pergunta quando encontro um erro no ambiente de teste e lembro: "Eu já fiz isso antes, mas posso fazê-lo diretamente no web.config sem precisar modificar o código e reimplantá-lo no ambiente de teste." , mas são necessárias duas alterações ... o que foi?
Para referência futura
E
fonte
Eu tive um problema semelhante ao postar no terminal WebAPI. Ao desativar o CustomErrors = Off, consegui ver o erro real que está faltando uma das DLLs.
fonte
Caso isso ajude alguém:
Eu tive um problema semelhante e, seguindo as instruções do Nates, adicionei:
Isso me mostrou mais informações sobre o erro:
Foi quando lembrei que havia movido o arquivo edmx para um local diferente e esqueci de alterar o nó connectionstrings na configuração (o nó connectionsstrings foi colocado em um arquivo separado usando "configSource", mas isso é outra história).
fonte
Meu arquivo XML swagger não foi implantado em \ bin:
http://wmpratt.com/swagger-and-asp-net-web-api-part-1/
Ele precisava ser definido na configuração da versão e na configuração da depuração.
fonte
Se você possui
<deployment retail="true"/>
o machine.config do .NET Framework, não verá mensagens de erro detalhadas. Verifique se a configuração é falsa ou não está presente.fonte
Então, eu tentei todas as soluções sugeridas sem sucesso. Tudo o que fiz foi definir a execução do aplicativo a partir do servidor e ele exibiu o erro por completo, isso deveria ter funcionado quando eu defini o modo customErrors como false, mas não funcionou. No momento em que naveguei na API do servidor, pude ver o problema.
fonte