2017-10-05 78 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