/// <summary> /// Function used to detect the desired response format and return the provider error response /// </summary> /// <param name="request"></param> /// <param name="code"></param> /// <param name="_responseEnvelope"></param> /// <returns></returns> public HttpResponseMessage FormatErrorResponse(HttpRequestMessage request, HttpStatusCode code, AuthenticationResponse _responseEnvelope) { HttpResponseMessage response = new HttpResponseMessage(); MediaTypeWithQualityHeaderValue responseType = null; //Check the requested response format if (request.GetRequestContext() != null && request.GetRequestContext().Url != null && request.GetRequestContext().Url.Request != null && request.GetRequestContext().Url.Request.Headers != null) responseType = request.GetRequestContext().Url.Request.Headers.Accept.LastOrDefault(); if (responseType != null && responseType.ToString().ToLower().Equals("application/json")) response.Content = new ObjectContent<AuthenticationResponse>(_responseEnvelope, new JsonMediaTypeFormatter()); else response.Content = new ObjectContent<AuthenticationResponse>(_responseEnvelope, new XmlMediaTypeFormatter()); return response; }
protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { LoggingUtility log = LoggerFactory.GetLogger(); ErrorUtil errorUtil = new ErrorUtil(); LogObject logObject = new LogObject(); int Error = 0; var tsc = new TaskCompletionSource<HttpResponseMessage>(); string _requestId; var QueryValues = request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value); QueryValues.TryGetValue("requestId", out _requestId); if (String.IsNullOrEmpty(_requestId)) _requestId = Guid.NewGuid().ToString(); log.ProcessingDebug(_requestId, "Full request URL:" + request.RequestUri.AbsoluteUri); request.Properties.Add("requestId", _requestId); AuthenticationResponse _responseEnvelope = new AuthenticationResponse(_requestId); if (new CommonMethods().IsArgumentFormat(request.RequestUri.OriginalString)) request = new CommonMethods().CombobulateArgumentRequest(request); if (new CommonMethods().IsLegacyFormat(request.RequestUri.OriginalString)) request = new CommonMethods().CombobulateRequest(request); AuthenticationObject authenticationObject = new CommonMethods().GetAuthenticationHeader(request); //If header does not contain the required credentials then add an error to the response envelope else if (authenticationObject == null || authenticationObject.AuthenticationType == null || authenticationObject.ApiUser == null || authenticationObject.SharedSecret == null) { Error = ErrorKey.ERR_HUB_AUTHENTICATION_FAILED; authenticationObject = new AuthenticationObject(); } //Check authentication else { Error = Authenticate(authenticationObject, _requestId); } if (Error != 0) { Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ApiUser", authenticationObject.ApiUser); _responseEnvelope.Data.Errors.Add(new ErrorObject(Error, parameters)); logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); var response = FormatErrorResponse(request, HttpStatusCode.OK, _responseEnvelope); tsc.SetResult(response); return tsc.Task; } else { logObject = new CommonMethods().Authentication_ToLogObject(_requestId, authenticationObject.ApiUser, OperationType, OperationName, authenticationObject, _responseEnvelope.Data.Errors); log.InfoJson(logObject); var Response = base.SendAsync(request, cancellationToken); return Response; } }