2013-11-27 3 views
4

데스크톱 응용 프로그램에서 원격 서버로 파일을 업로드하려고합니다. 잠시 동안 SO를 탐색 한 후에이 접근법이 가장 청결한 방법이 될 것 같습니다. 문제는 매개 변수가 서버 측에서 수신되지 않는다는 것입니다. 내가 뭘 놓치고 있니?HttpClient PostAsync 메서드를 통해 파일과 매개 변수를 원격 서버에 업로드하는 방법은 무엇입니까?

private void AddFile(FileInfo fileInfo, int folderId) 
    { 
     using (var handler = new HttpClientHandler() {CookieContainer = _cookies}) 
     { 
      using (var client = new HttpClient(handler) {BaseAddress = new Uri(_host)}) 
      { 
       var requestContent = new MultipartFormDataContent(); 
       var fileContent = new StreamContent(fileInfo.Open(FileMode.Open)); 
       var folderContent = new StringContent(folderId.ToString(CultureInfo.InvariantCulture)); 
       requestContent.Add(fileContent, "file", "file"); 
       requestContent.Add(folderContent, "folderId", "folderId"); 

       client.PostAsync("/Company/AddFile", requestContent); 
      } 
     } 
    } 

편집 : 나는 그것을 가지고 시행 착오를 많은

[HttpPost] 
    public ActionResult AddFile(HttpPostedFileBase file, int folderId) 
+0

해당 서버 측 서명이 MVC 컨트롤러의 작업입니까? 당신이 그것을 통제합니까? – SalvadorGomez

+0

MVC 컨트롤러에 있습니다. 나는 그것을 현재 수정할 수 없다. – Billdr

+0

서버 사이트 코드를 알려주십시오. – Teddy

답변

5

:이 서버 측이 기대하는 서명입니다. 몇 가지 문제가있었습니다. 1) 매개 변수 이름이 따옴표로 예상됩니다. 2) 헤더 정보가 누락되었습니다. 여기에 작동 코드가 있습니다.

private void AddFile(FileInfo fileInfo, int folderId) 
    { 
     using (var handler = new HttpClientHandler() {CookieContainer = _cookies}) 
     { 
      using (var client = new HttpClient(handler) {BaseAddress = new Uri(_host)}) 
      { 
       var requestContent = new MultipartFormDataContent(); 
       var fileContent = new StreamContent(fileInfo.OpenRead()); 
       fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
        { 
         Name = "\"file\"", 
         FileName = "\"" + fileInfo.Name + "\"" 
        }; 
       fileContent.Headers.ContentType = 
        MediaTypeHeaderValue.Parse(MimeMapping.GetMimeMapping(fileInfo.Name)); 
       var folderContent = new StringContent(folderId.ToString(CultureInfo.InvariantCulture)); 

       requestContent.Add(fileContent); 
       requestContent.Add(folderContent, "\"folderId\""); 

       var result = client.PostAsync("Company/AddFile", requestContent).Result; 
      } 
     } 
관련 문제