如何控制ODATA误差细节的存在



我正在尝试控制Web API 2 ODATA V4服务中错误响应中的详细信息的存在。当我打到本地IIS上的ODATA服务时,我会得到类似的东西:

{
  "error": {
    "code": "Error code",
    "message": "Message from exception filter",
    "details": [
      {
        "code": "Detail code",
        "message": "Details here"
      }
    ],
    "innererror": {
      "message": "Exception message here",
      "type": "Exception type",
      "stacktrace": "Stack trace here"
    }
  }
}

当我使用相同的服务并将其部署在远程服务器上时,并用相同的消息击中它时,我得到了:

{
  "error": {
    "code": "Error code",
    "message": "Message from exception filter"
  }
}

我猜想" Innererror"one_answers"细节"部分被抑制了,因为我远程调用服务?我很高兴" Innererror"部分被压制了 - 我不想泄漏这些细节 - 但我想揭露"详细信息"部分,以便我可以就某些错误提供更多反馈。有一个简单的方法可以实现这一目标吗?

谢谢!

我正在使用 request.CreateErrorResponse(myhttpstatuscode,myodataError)创建我的ODATA错误响应。查看System.web.http.odata.extensions.httprequestmessageextensions.CreateErrorResponse的源代码,似乎如果请求。ShouldincludeRudeErrordEtail是错误的,那么OdataError被用"代码"one_answers" Message"项目重新创建。我的解决方案是创建另一个过载/延伸的createRorresponse,它接受一个参数,该参数控制是否应包括"详细信息"部分:

public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request,
            HttpStatusCode statusCode, ODataError oDataError, bool includeDetails)
{
    if (request.ShouldIncludeErrorDetail())
    {
        return request.CreateResponse(statusCode, oDataError);
    }
    else
    {
        return request.CreateResponse(
            statusCode,
            new ODataError()
            {
                ErrorCode = oDataError.ErrorCode,
                Message = oDataError.Message,
                Details = includeDetails ? oDataError.Details : null
            });
    }
}

这允许独立于"详细信息"部分抑制" Innererror"部分。

最新更新