2013-10-22 43 views
1

我想使用Web API爲要使用的應用程序構建一些端點。我希望它做的第一件工作是允許客戶端上傳文件到服務器。將.NET應用程序中的文件上傳到Web API POST端點

客戶端將運行某種.NET應用程序,也許是一個控制檯應用程序或其他東西。它不會是使用表單元素或文件輸入的網頁。

我認爲在Web API會是這個樣子:

public class FileController : ApiController 
{ 
    public bool Post(File newFile) 
    { 
     return true; 
    } 
} 

以此爲模型類:

public class File 
{ 
    public string name { get; set; } 
    public Stream uploadStream { get; set; } 
} 

我敢肯定,這是可怕的錯誤,但它是我的第一個Web API。

我想在一個控制檯應用程序來測試這一點:

namespace TestFileUpload 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Starting the test..."); 

      using (FileStream readstream = new FileStream(@"C:\\Test\Test2.txt", FileMode.Open, FileAccess.Read)) 
     { 
      WebAPI.Classes.File newFile = new WebAPI.Classes.File() 
      { 
       name = "Test.txt", 
       uploadStream = readstream 
      }; 

      HttpClient client = new HttpClient(); 
      client.BaseAddress = new Uri("http://localhost:50326"); 
      client.DefaultRequestHeaders.Accept.Add(
           new MediaTypeWithQualityHeaderValue("application/json")); 

      HttpResponseMessage response; 
      response = client.PostAsJsonAsync("http://localhost:50326/api/file", newFile).Result; 
      Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 

     }; 

      Console.ReadLine(); 
     } 
    } 
} 

現在我得到一個超時錯誤,當我試圖得到響應: 「錯誤獲得價值從‘ReadTimeout’上' System.IO.FileStream」。」

幫助?

回答

0

客戶端使用Web API服務的方法很多,但最直接的方法是使用Web api客戶端庫。也許你應該考慮構建一個簡單的get方法,在跳入文件上傳之前返回一個對象。

Web API from .NET Client

不能添加服務引用爲Web API不公開WSDL。

+0

謝謝。請參閱最新的問題;我現在正在使用您指出的建議,但我沒有看到任何HTTP請求。 –

+0

首先,基地址看起來不對。它應該只是基地,如「http:// localhost:50326」。其次,必須有一個異常,或者Result屬性應該將我們指向哪裏出錯。他們說什麼?它很難猜測... –

+0

更新了問題。我在FileStream上發生異常。 –

相關問題