WebApi的{“消息”:“错误发生了”}在IIS 7上,而不是在IIS Express中

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在使用ASP.NETMVC4WebApi,并在IIS Express上的本地计算机上运行它,我已经配置了IISExpress来为远程计算机服务。

在确定这是一个不太理想的解决方案之后,我们决定在安装.NET 4.5之后将WebApi放在远程服务器上。当我使用fiddler并将帖子发送到本地计算机上的控制器时,它会返回正确的响应,但当我将域更改为运行IIS 7的web服务器时,同一个帖子会返回一个神秘的响应。

{“消息”:“发生错误”}

有人知道会发生什么事吗?

提问于
用户回答回答于

问题是缺少了一个依赖项,它不在服务器上,而是在我的本地机器上。在我们的例子中,它是一个Devart.Data.LinqDLL。

为了得到这个答案,我打开IIS跟踪500错误。这提供了一些信息,但真正有用的是在web.config设置<system.web><customErrors mode="Off"/></system.web>这指向缺少动态加载的依赖项。在添加了这个依赖项并告诉它在本地复制之后,服务器就开始工作了。

用户回答回答于

基本上:

使用IncludeErrorDetailPolicy相反,如果CustomErrors不会解决这个问题:

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

注意:要小心返回详细的错误信息,可以向“黑客”泄露敏感信息。

TL;DR版本

对我来说CustomErrors其实没什么用。它已经被设置为Off,但我还是只得到了一个微不足道的an error has occurred留言。我想大家接受的答案是三年前的事,这在当今的网络世界里已经很久了。我使用的是WebAPI 2和ASP.NET5(MVC 5),而微软已经放弃了只使用IIS的策略,而CustomErrors是旧的skool IIS;)

然后我发现我无法像在我的开发机器上那样看到Chrome网络选项卡中的错误。最后,我设法解决了这个问题,在我的生产服务器上安装了Chrome,然后在服务器本身(例如,在‘localhost’上)浏览应用程序。然后,更详细的错误出现与堆栈跟踪和所有。

IncludeErrorDetailPolicy在全局WebApi配置中:

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

幸运的是,他还解释了如何设置webapi(2)听CustomErrors设置。

扫码关注云+社区