我在Azure WebApp中有一个REST API。 当POST发送到我的端点时,我会进行一些检查,并在需要时抛出HttpException:
throw new HttpException(400, msgInfo);
msgInfo
是我的自定义消息。在使用Visual Studio 2015的开发机中,我的响应是:
{"Message":"An error has occurred.","ExceptionMessage":"[my custom message]","ExceptionType":"System.Web.HttpException","StackTrace":"..."}
现在我可以向用户显示一条有用的消息。
但是在Azure上,响应只是:
{"Message":"An error has occurred."}
因此没有自定义消息。
很有可能这是Azure中的设置。我了解它不应显示我的完整堆栈跟踪,但应显示ExceptionMessage
。
在我的Web.config
中,我有:
<system.web>
<customErrors mode="RemoteOnly" />
</system.web>
<system.webServer>
<httpErrors errorMode="Detailed" />
</system.webServer>
该如何解决?
答案 0 :(得分:1)
Asp.net Web API具有一个单独的配置,用于显示如何在不同的环境中显示错误详细信息。
在您HttpConfiguration
中,有一个名为IncludeErrorDetailPolicy
的属性。这是它的可能值。
public enum IncludeErrorDetailPolicy
{
// Summary:
// Use the default behavior for the host environment. For ASP.NET hosting, usethe value from the customErrors element in the Web.config file.
// For self-hosting, use the value System.Web.Http.IncludeErrorDetailPolicy.LocalOnly.
Default = 0,
// Summary:
// Only include error details when responding to a local request.
LocalOnly = 1,
//
// Summary:
// Always include error details.
Always = 2,
//
// Summary:
// Never include error details.
Never = 3,
}
您可以配置如下:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCloudServiceGateway();
var config = new HttpConfiguration
{
IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always // Add this line to enable detail mode in release
};
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
有关更多详细信息,您可以参考此thread。
此外,您可以设置<customErrors mode="Off"/>
,它指定禁用自定义错误。 detailed ASP.NET errors将显示给远程客户端和本地主机。