Azure不会在HttpException中传递我的自定义消息

时间:2018-06-20 10:32:28

标签: c# azure web-config

我在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>

该如何解决?

1 个答案:

答案 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将显示给远程客户端和本地主机。