2017-02-27 25 views
1

我有一個Web服務的兩種方法,我試圖用Web客戶端調用:WebClient的UploadString不工作

[Route("TestDownload")] 
[HttpGet] 
public string TestDownload() 
{ 
    return "downloaded"; 
} 

[Route("TestUpload")] 
[HttpPost] 
public string TestUpload(string uploaded) 
{ 
    return uploaded; 
} 

此代碼:

using (var wc = new WebClient()) 
{ 
    var sResult = wc.DownloadString("http://localhost/Website/TestDownload"); 
    Console.WriteLine(sResult); 
} 

此代碼拋出一個System.Net。 WebException:(404)Not Found

using (var wc = new WebClient()) 
{ 
    var sResult = wc.UploadString("http://localhost/Website/TestUpload", "test"); 
    Console.WriteLine(sResult); 
} 

我在做什麼錯?由於

回答

0

我想我想通了。 WebClient上的UploadString正在使用字符串參數作爲http請求主體。默認情況下,WebApi爲來自查詢字符串的簡單類型(包括字符串)提供控制器方法參數(請參閱https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api)。要覆蓋此行爲並指示在請求正文中找到字符串參數,請使用[FromBody]屬性。

[Route("TestUpload")] 
[HttpPost] 
public string TestUpload([FromBody] string uploaded) 
{ 
    return uploaded; 
} 
0

嘗試添加該控制器/方法的路由,是這樣的:

routes.MapRoute(
    "yourRouteName", // Route name 
    "{controller}/{action}", 
    new { controller = "yourController", action = "TestUpload", uploaded="" } // Parameter defaults 
); 
+0

嗯所以我把它這個參數放在URL字符串中。如果字符串太大而不適合(它實際上是一個序列化對象)呢? –

相關問題