/// <summary> /// Sets the ResultCode for the specified ResultSummary object to the specified value. /// </summary> /// <param name="resultSummary"> /// The ResultSummary object whose ResultCode to set. /// </param> /// <param name="value"> /// The value to which to set the ResultSummary's ResultCode. /// </param> /// <exception cref="ArgumentNullException"> /// Parameter resultSummary cannot be null. /// </exception> public static void SetResultCode(this ResultSummary resultSummary, ResultCode value) { if (resultSummary == null) { throw new ArgumentNullException("resultSummary", "Parameter resultSummary cannot be null."); } // Set the ResultCode and the corresponding Explanation. resultSummary.ResultCode = value.ToString(); resultSummary.Explanation = ResultCodeExplanation.Get(resultSummary.GetResultCode()); }
private static void BuildResponse(CommerceContext context, Exception ex, Action <HttpResponseMessage, HttpStatusCode, CallCompletionStatus> completeResponse) { ResultSummary resultSummary = (ResultSummary)context[Key.ResultSummary]; // If an exception is specified, set the result code accordingly. if (ex != null) { resultSummary.SetResultCode(ResultCode.UnknownError); } // Log the response. object response = context[Key.Response]; context.Log.Verbose("{0} response:\r\n{1}", context.ApiCallDescription, General.SerializeJson(response)); // Get response status code. ResultCode resultCode = resultSummary.GetResultCode(); HttpStatusCode httpStatusCode = MapResultToStatusCode(resultCode); // Log the result and get call completion status. CallCompletionStatus callCompletionStatus = CallCompletionStatus.Success; if (httpStatusCode == HttpStatusCode.OK || httpStatusCode == HttpStatusCode.Created || httpStatusCode == HttpStatusCode.Accepted) { context.Log.Information("{0} call processed successfully.", context.ApiCallDescription); } else { if (ex != null) { callCompletionStatus = CallCompletionStatus.Error; context.Log.Critical("{0} call ended with an error.", ex, context.ApiCallDescription); } else { callCompletionStatus = CallCompletionStatus.SuccessWithWarnings; context.Log.Warning("{0} call unsuccessfully processed.\r\n\r\nResultCode: {1}\r\n\r\nExplanation: {2}", (int)resultCode, context.ApiCallDescription, resultSummary.ResultCode, resultSummary.Explanation); } } // Next, build the HttpResponseMessage for the call. HttpResponseMessage httpResponseMessage = null; if (context[Key.Request] != null) { HttpRequestMessage request = (HttpRequestMessage)context[Key.Request]; httpResponseMessage = request.CreateResponse(httpStatusCode, response); AddPerformanceInformation(context, request.RequestUri.Query, httpResponseMessage.Headers); } // Finally, complete the response. completeResponse(httpResponseMessage, httpStatusCode, callCompletionStatus); }