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,
});
}
使用 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,
});
}