2017-10-05 96 views
0

我是ApiControllers的新手,並且正在從客戶端向api發送文件並從此處保存文件進行測試。下面的代碼確實有效,並且文件從客戶端「複製」到服務器,但響應消息雖然是「204無內容」 - 我應該提防這裏的任何事嗎?將文件發佈到ApiController

的ApiController代碼是這樣的:

[HttpPost]  
    [Route("api/UploadFile")]  
    public async Task UploadFile() 
    { 
     string fileName = "myfilename.txt"; 
     Stream requestStream = await Request.Content.ReadAsStreamAsync();   

     using (FileStream fileStream = File.Create(@"C:\myDropFolder\" + fileName)) 
     { 
      await requestStream.CopyToAsync(fileStream); 
     }   
    } 

和呼叫到客戶端看起來像這樣,從一個控制檯應用程序測試:

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:1741/api/UploadFile/"); 
      request.Method = WebRequestMethods.Http.Post; 

      byte[] fileToSend = File.ReadAllBytes(@"C:\myDropFolder\tester.txt"); 
      request.ContentLength = fileToSend.Length; 

      using (Stream requestStream = request.GetRequestStream()) 
      { 
       // Send the file as body request. 
       requestStream.Write(fileToSend, 0, fileToSend.Length); 
       requestStream.Close(); 
      } 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
       Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription); 
       Console.ReadLine();    

     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
} 

回答

2

的Web API對POST默認響應狀態代碼是204並且GET爲200(​​)。除非你退回IHttpActionResult,然後明確返回200:

[HttpPost]  
[Route("api/UploadFile")]  
public async Task<IHttpActionResult> UploadFile() 
{ 
    string fileName = "myfilename.txt"; 
    Stream requestStream = await Request.Content.ReadAsStreamAsync();   

    using (FileStream fileStream = File.Create(@"C:\myDropFolder\" + fileName)) 
    { 
     await requestStream.CopyToAsync(fileStream); 
    } 
    return Ok(); 
} 
+0

非常感謝你的解釋阿林! – micknt