2017-04-18 132 views
0

我創建了WebAPI服務。我在服務控制器,它看起來像:發送.net核心應用程序到Web API的請求

public class MyController : ApiController 
{ 
    [HttpPost] 
    public ResponceTools.APIResponce UserLoggedIn(UserArgs args) 
    { 
     //doing something  
    } 
} 

其中

public class UserArgs 
{ 
    public string UserID { get; set; } 
} 

我可以發送請求到該方法UserLoggedIn和使用curl給予充分的迴應:

curl --data "UserID=7822f2b9-44f1-4e30-a9da-d26e277fa0ac" http://localhost:8081/UserLoggedIn" 

現在我正在編寫.net核心Web應用程序,並且我想使用此服務。

string requestStr = WebAPIURL + "/UserLoggedIn"; 
var content = new StringContent("UserID=" + userID.ToString(), 
           System.Text.Encoding.Unicode, 
           "application/xml");    
var task = client.PostAsync(requestStr, content); 
var str = await task.Result.Content.ReadAsStringAsync();  

但方法參數值爲空。

我在做什麼錯?

P.S.我嘗試通過「Register」方法在我的WebApi應用程序中激活XmlSerializer。它沒有幫助。

config.Formatters.XmlFormatter.UseXmlSerializer = true; 

謝謝你的幫助。

+0

var task = client.PostAsync(requestStr +「?UserId =」+ userID.tostring,content); //不知道可能是這個作品 –

+0

你的內容類型是xml,但你沒有發送xml。 – Brad

回答

2

不應將字符串作爲字符串發送,而應將其作爲對象發送,以使其與UserArgs的類定義相匹配。

var user = { UserID: userID }; 

然後由內容類型application/JSON的發送對象,因爲這是在網頁API默認解串器。

var content = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json"); 
+1

謝謝,我不知道JSON是Web API的默認串行器。 – gikerix

0

它必須是足夠

var content = new StringContent("UserID=" + userID.ToString(), 
          System.Text.Encoding.Unicode, 
          "application/x-www-form-urlencoded"); 

您正在發送請求數據不在XML或JSON來改變內容類型,以便此內容類型是合適的唯一的一個。 如果你想知道更多關於綁定的知識,你可以看到這篇文章(https://andrewlock.net/model-binding-json-posts-in-asp-net-core/

相關問題