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); }
/// <Examples> /// Accept: multipart/related; type="image/jpx"; transfer-syntax=1.2.840.10008.1.2.4.92, /// Accept: multipart/related; type="image/jpx"; transfer-syntax=1.2.840.10008.1.2.4.93 /// Accept: multipart/related; type="image/jpeg" /// </Examples> protected virtual IEnumerable <IWadoRsResponse> ProcessMultipartRequest ( IObjectId objectID, MediaTypeWithQualityHeaderValue mediaTypeHeader ) { string subMediaType; IEnumerable <string> transferSyntaxes; string defaultTransfer = null; bool instancesFound = false; subMediaType = MultipartResponseHelper.GetSubMediaType(mediaTypeHeader); DefaultMediaTransferSyntax.Instance.TryGetValue(subMediaType, out defaultTransfer); transferSyntaxes = MultipartResponseHelper.GetRequestedTransferSyntax(mediaTypeHeader, defaultTransfer); foreach (var result in FindLocations(objectID, subMediaType, transferSyntaxes, defaultTransfer)) { instancesFound = true; yield return(new WadoResponse(result.Location.GetReadStream( ), subMediaType) { TransferSyntax = result.TransferSyntax }); } if (!instancesFound) { string defaultDicomTransfer; DefaultMediaTransferSyntax.Instance.TryGetValue(MimeMediaTypes.DICOM, out defaultDicomTransfer); foreach (var result in RetrieveService.GetTransformedSopInstances(objectID, MimeMediaTypes.DICOM, defaultDicomTransfer, subMediaType, transferSyntaxes.FirstOrDefault( ))) { yield return(new WadoResponse(result.Location.GetReadStream( ), subMediaType) { TransferSyntax = result.TransferSyntax }); } } }
public virtual HttpResponseMessage RetrieveInstanceMetadata(IWadoRsInstanceRequest request) { if (IsMultiPartRequest(request)) { var subMediaHeader = MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( )); if (null == subMediaHeader || subMediaHeader != MimeMediaTypes.xmlDicom) { return(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); } return(RetrieveMultipartInstance(request, request)); //should be an XML request! } else //must be json, or just return json anyway (*/*) { return(ProcessJsonRequest(request, request)); } }
private HttpResponseMessage SearchForDicomEntity ( IQidoRequestModel request, DicomDataset dicomSource, DoQueryDelegate doQuery ) { if (null != request.Query) { HttpResponseMessage response = null; 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); } var results = doQuery(QueryService, dicomSource, request); //TODO: move configuration params into their own object if (MultipartResponseHelper.IsMultiPartRequest(request)) { response = CreateMultipartResponse(request, results.Result); } else { response = CreateJsonResponse(results.Result); } AddResponseHeaders(request, dicomSource, response, results); return(response); } return(null); }
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); }
protected virtual bool IsMultiPartRequest(IWadoRequestHeader header) { return(MultipartResponseHelper.IsMultiPartRequest(header)); }
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); }