2014-09-07 1 views
2

나는에 대한 다중 응답 컨텐츠 유형 값을 설정할 수 있어야합니다 :웹 API MultiPartContent 메시지에서 "type"매개 변수를 어떻게 설정합니까?

Content-Type: multipart/related; type=application/dicom; boundary={MessageBoundary} 

이것은 국제 표준에 정의 된, 그래서 거기에 선택의 여지가, 내가 사용의 것을 볼 수있다 "type = xxx/yyy"는 MultiPart 메시지의 "기본"컨텐츠 유형을 정의하는 표준 사용법입니다.

하지만 ...... 나는 웹 API에 달리 우수한 MultipartContent 클래스를 사용하여이 문자열을 생성 할 수있는 방법을 찾기 위해 관리하지 않았습니다. 나는 시도했다 :

1) 아무것도하지 않는 -이 내용의 첫 번째 항목에서 포착됩니다 바라고 - 예 -이 하위 유형의 일부로 설정)

2를하지 않는 :

MultipartContent mpc = new MultipartContent("related; type=application/dicom+xml"); 

이 에러 실패 "값의 포맷. '다중/관련; TYPE = 애플리케이션/DICOM + XML을'무효 ' MediaTypeHeadervalue 다른 매개 변수를 명시 적으로 설정

3) :이

:-(같은 오류를 제공

var mthv = new MediaTypeHeaderValue("multipart/related"); 
mthv.Parameters.Add(new NameValueHeaderValue("type", "application/dicom+xml")); 

나는 분명 여기서 뭔가 누락, 또는 정말를 표시 할 수있는 방법이없는 건가요 관련 유형

UPDATE :

몇 가지 조사 후, 및 decompili NameValueHeaderValue의 생성자가 그 나라와 "토큰 문자는"버전이 동일한 길이를 가지고 있는지 여부를 확인하기 위해 이름과 토큰을 검사하여로 - NG는 NameValueHeaderValue 클래스, 문제가 유형 값에 /와 + 문자 것 같다 - 즉, 토큰이 아닌 문자가 포함되어 있는지 여부와 그 경우 거부합니다. 형식 값의 표준 값이/문자를 포함하는 MIME 형식 인 경우, 이는 지나치게 부적절한 엄격한 제한 조건으로 보입니다.

답변

4

문제가 /+ 문자의 유형 값에 포함되어 있지만 .NET에서 입력을 거부하는 것이 완전히 잘못된 것은 아닙니다 (API의이 부분이 더 잘 설계 되었으면 좋겠다. 내가 아는가). MIME을 지정하는 RFC 2045 섹션 5.1에서는 ()<>@,;:\"/[]?= 중 하나가 들어 있으면 매개 변수 값을 인용해야한다고 말합니다. 멀티 파트/관련 콘텐츠 유형을 설명 RFC 2387는 매개 변수 값은 일반적으로을 인용이 필요하다고 말한다 그들이주는 예는 적절하게 인용 하위 콘텐츠 형식의 값을 갖는다. 구체적인 문제는 예를 들어 이 작업을해야합니다 :

+0

감사합니다. .... 내가 필요한 것. .... 이제 DICOM 표준을 수정해야합니다! – medconn

+0

하위 유형이 RFC에 따라 인용되면 고객이 응답을 이해하지 못합니까? –

+1

나는 아직 내 자신의 구현에 대해 아직 테스트 중이므로 표준을 수정하려는 나의 희망은 다른 사람들이 내가했던 것처럼 똑같은 실수를하지 않도록하는 것입니다! – medconn

1

나는 비슷한 문제로 고투하고 있었는데 트릭을 그랬어.

DICOM STOW-RS 서비스의 DICOM 표준은 현재 "multipart/related; type=application/dicom; boundary={messageBoundary}"를 포함 할 Content-Type 헤더를 지정 것으로 보인다. 이것은 분명히 잘못되어 "multipart/related; type="application/dicom"; boundary={messageBoundary}"이어야합니다.

type=application/dicom을 포함하는 Content-Type 형식 매개 변수가있을 때 HttpContentMultipartExtensions.IsMimeMultipartContent() 메서드가 false를 반환하고 HttpContent.Headers 값이 비어있는 문제가있었습니다.

type="application/dicom"을 사용하면 효과적입니다.