2014-10-24 1 views
0

"System.Web.Http.SelfHost"의 "HttpSelfHostConfiguration"을 사용하여 자체 호스팅 한 웹 서비스를 만들었습니다. 다른 사람들이 POST 호출을 만들어 내 서비스에 파일을 업로드 할 수있게 해주는 REST API를 만들어야합니다.자체 호스팅 웹 서버 환경에서 POST REST API를 통해 C# 파일 업로드

내가 지금까지 해본 모든 연구는 IIS와 같이 호스팅 된 웹 서비스에 대한 것이 었습니다. 따라서 HttpRequest 콘텐트를 얻기 위해 "HttpContext.Current"를 사용하는 것이 가능합니다.

그러나 자체 호스팅 환경에서 "HttpContext.Current"는 null이므로 다른 경로로 이동해야합니다. 내 Google-fu는 꺼져 있지만 자체 호스팅 환경에서이 작업을 수행하는 방법에 대한 정보를 찾을 수없는 것 같습니다.

누구나이 상황에서 파일을 POST 할 수있는 REST API를 만드는 방법에 대한 예제 또는 조언이 있습니까?

미리 감사드립니다. HttpRequestMessage 아래 게시물의 방법처럼

답변

1

사용

그런
public HttpResponseMessage Post(HttpRequestMessage request) {...} 

당신이 요청 메시지

문자열 sRequestcXMLContent = 인코딩의 컨텍스트를 추출하기 위해 다음과 같은 몇 가지 일을 사용할 수 있습니다 .UTF8.GetString (request.Content.ReadAsByteArrayAsync(). Result);

희망이 도움이 될 것입니다!

+0

안녕하세요, Darshana! 위의 코드를 사용해 보았습니다. 내 서비스를 디버깅 할 때, 내 REST API 클라이언트가 내 웹 서버에서 POST를 호출하여 올바른 함수를 호출하게되었습니다. 그러나 위의 설정에서 "Post (HttpRequestMessage request)"는 "request"변수에있는 "request.Content"변수가 비어있는 것처럼 보입니다 (request.Content.Headers.ContentLength는 0 임). 자, 아마 내 고객이 엉망이 될 수도 있습니다. (제가 확신 할 수없는 몇 가지 테스트를하고 있습니다.)하지만 문제를 즉시 알 수있을 경우를 대비하여 지금 상황에 대한 업데이트를 제공 할 것이라고 생각했습니다. – jchensor

+0

참고로, 다른 클라이언트를 사용해 봤는데 더 이상 콘텐츠 길이가 0이 아니 었습니다. 나는 실험을 계속하고 다시 당신을 업데이 트합니다! – jchensor

+0

죄송합니다. 다시 연락 드리겠습니다. 그것은 훌륭하게 작동했고 며칠 동안 산만하게 코딩 된 것들을 얻었습니다.^_ ^하지만 다시 한번 감사드립니다! 거대한 도움이되었습니다! – jchensor

0

이 게시물은 도움이되었지만 사람들을 돕기 위해 내 솔루션을 게시 할 것이라고 생각했습니다.

public async void Post(HttpRequestMessage Message) 
    { 
     MultipartMemoryStreamProvider x = await Message.Content.ReadAsMultipartAsync(); 
     Byte[] xx = await x.Contents[0].ReadAsByteArrayAsync(); 
     File.WriteAllBytes("c:\\test.png", xx); 
    } 
관련 문제