private static HttpResponseMessage CreateMultipartResponse(IQidoRequestModel request, IEnumerable <DicomDataset> results) { HttpResponseMessage response; if (MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( )) == MimeMediaTypes.xmlDicom) { MultipartContent multiContent; response = new HttpResponseMessage( ); multiContent = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary); response.Content = multiContent; foreach (var result in results) { XmlDicomConverter converter = new XmlDicomConverter( ); MultipartResponseHelper.AddMultipartContent(multiContent, new WadoResponse(new MemoryStream(Encoding.ASCII.GetBytes(converter.Convert(result))), MimeMediaTypes.xmlDicom)); } multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + MimeMediaTypes.xmlDicom + "\"")); } else { response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest); } return(response); }
public virtual HttpResponseMessage RetrieveMultipartInstance(IWadoRequestHeader header, IObjectId request) { HttpResponseMessage response; MultipartContent multiContent; MediaTypeWithQualityHeaderValue selectedMediaTypeHeader; if (!IsMultiPartRequest(header)) { return(new HttpResponseMessage(System.Net.HttpStatusCode.NotAcceptable)); //TODO: check error code in standard } response = new HttpResponseMessage( ); multiContent = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary); selectedMediaTypeHeader = null; response.Content = multiContent; foreach (var mediaTypeHeader in header.AcceptHeader) { if (request is IWadoRsFramesRequest) { var frames = ((IWadoRsFramesRequest)request).Frames; foreach (int frame in frames) { request.Frame = frame; foreach (var wadoResponse in ProcessMultipartRequest(request, mediaTypeHeader)) { MultipartResponseHelper.AddMultipartContent(multiContent, wadoResponse); selectedMediaTypeHeader = mediaTypeHeader; } } } else { foreach (var wadoResponse in ProcessMultipartRequest(request, mediaTypeHeader)) { MultipartResponseHelper.AddMultipartContent(multiContent, wadoResponse); selectedMediaTypeHeader = mediaTypeHeader; } } if (selectedMediaTypeHeader != null) { break; } } if (selectedMediaTypeHeader != null) { multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + MultipartResponseHelper.GetSubMediaType(selectedMediaTypeHeader) + "\"")); } else { response.StatusCode = System.Net.HttpStatusCode.NotFound; //check error code } return(response); }
private HttpResponseMessage SearchForDicomEntity ( IQidoRequestModel request, fo.DicomDataset dicomSource, DoQueryDelegate doQuery ) { if (null != request.Query) { var matchingParams = request.Query.MatchingElements; var includeParams = request.Query.IncludeElements; foreach (var returnParam in includeParams) { InsertDicomElement(dicomSource, returnParam, ""); } foreach (var queryParam in matchingParams) { string paramValue = queryParam.Value; InsertDicomElement(dicomSource, queryParam.Key, paramValue); } ICollection <fo.DicomDataset> results = doQuery(QueryService, dicomSource, request); //TODO: move configuration params into their own object if (MultipartResponseHelper.IsMultiPartRequest(request)) { if (MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( )) == MimeMediaTypes.xmlDicom) { HttpResponseMessage response; MultipartContent multiContent; response = new HttpResponseMessage( ); multiContent = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary); response.Content = multiContent; foreach (var result in results) { XmlDicomConverter converter = new XmlDicomConverter( ); MultipartResponseHelper.AddMultipartContent(multiContent, new WadoResponse(new MemoryStream(Encoding.ASCII.GetBytes(converter.Convert(result))), MimeMediaTypes.xmlDicom)); } multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + MimeMediaTypes.xmlDicom + "\"")); return(response); } else { return(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); } } else { StringBuilder jsonReturn = new StringBuilder("["); JsonDicomConverter converter = new JsonDicomConverter( ) { IncludeEmptyElements = true }; foreach (var response in results) { jsonReturn.AppendLine(converter.Convert(response)); jsonReturn.Append(","); } if (results.Count > 0) { jsonReturn.Remove(jsonReturn.Length - 1, 1); } jsonReturn.Append("]"); return(new HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new StringContent(jsonReturn.ToString( ), Encoding.UTF8, MimeMediaTypes.Json) }); } } return(null); }