使用Web API V2,托管为CloudFlare的Azure Web App,并且不会将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错误消息?
答案 0 :(得分:0)
通过将用户友好的错误消息移动到请求正文,而不是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,
});
}