CloudFlare 从 Web API V2 服务器更改 WebApi 用户友好 ResponseText/StatusCode/ReasonPhrase

CloudFlare changes WebApi user friendly ResponseText/StatusCode/ReasonPhrase from Web API V2 server

使用 Web API V2,作为 Azure Web 应用程序托管,CloudFlare 打开 ReasonPhrase(a.k.a StatusText,ResponseText)不会返回给客户端。

ReasonPhrase 在 ExceptionFilterAttribute 中设置如下:

public override void OnException(HttpActionExecutedContext context)
{
        //...code removed for brevity

        var ex = context.Exception;
        context.Response = new HttpResponseMessage(ex.StatusCode)
        {
            ReasonPhrase = GetUserFriendlyMessage(ex),
        };
}

这在本地有效,当 CloudFlare 被绕过时。但不是在 CloudFlare 处于活动状态时。

为什么 CloudFlare 会删除它,如何禁用它或者应该以不同方式处理用户友好的 API 错误消息?

通过将用户友好的错误消息而不是 reasonPhrase 移到请求正文中,我能够解决这个问题。大概 CloudFlare 或 Azure 不喜欢更长的 ReasonPhrase...

新的 OnException 方法:

public override void OnException(HttpActionExecutedContext context)
{
    //...code removed for brevity

    var ex = context.Exception;
    context.Response = request.CreateResponse(ex.StatusCode, new
    {
       message = friendlyMessage,
    });
}