2017-10-05 1 views
0

Ich bin neu in ApiControllers und testen beim Senden einer Datei vom Client an die API und speichern sie von hier aus. Der folgende Code funktioniert und die Datei wird vom Client auf den Server "kopiert", aber die Antwort lautet: "204 Kein Inhalt" - Sollte ich mich hier hüten?Eine Datei an einen ApiController senden

Der ApiController Code ist dies:

[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); 
     }   
    } 

Und der Anruf an den Client wie folgt aussieht, von einer Konsole-Anwendung zu testen:

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; 
     } 
    } 
} 

Antwort

2

Web Standardantwortstatuscode API für POST 204 und für GET ist 200 (Action Results in Web API 2). Es sei denn, Sie geben IHttpActionResult zurück und geben dann explizit 200 zurück:

+0

Vielen Dank für die Erklärung Arin! – micknt