摘要:[Xmarin.android] 呼叫POST的WebApi
紀錄一下Xamarim.android去呼叫WebApi的研究。在WebApi的部分就不帶太多細節,如果使用網頁來測試在MVC專案裡面新增的Web Api的話,就是只能測試Get動詞。這一篇我們要測試的是Xamarin.Android去呼叫Post動詞的Web Api。在進入Xamarin.Android之前,先來看看如何如何測試
你的WebApi 在接受Post動詞時正不正常? 這邊推薦兩個好用的工具,POSTMAN跟DHC。這邊用這個工作先來做前端取資料的測試。
在WebApi的Controller中,如果是使用[FromBody]的方式來接收資訊。
MVC的 Controller 中,以下方方式宣告。這個API接受POST動詞傳送過來的資料。並且回傳一個
字串資料。
public string Post([FromBody]string value)
{
return "webapi" + value;
}
因為是以FromBody的方式接收資料,在前端的測試,必須這樣送出資料。(這邊以DHC來測試)
特別要注意的是要送出的Content-Type。 在上面帶入的參數是一個[Formbody],所以在Content-type的部分要設定為 application/x-www-form-urlencoded。
在WebApi的Controller中,如果是使用Json的方式來接收資訊。
假設要帶入的參數是一個以上。這種情況是常常會遇到的。在Controller裡面做以下的宣告。
首先建立一個類別,然後再Action方法裡面接受傳入這個類別的值。
public string Post(Test testobj)
{
return "value1 = " + testobj.value1 + "value2 = " + testobj.value2;
}
public class Test()
{
public string value1 { get; set; }
public string value2 { get; set; }
}
WebApi由本來接收Frombody的資料轉變成接收Json檔案。在前端必須改成送出JSON的資料。
另外在剛才的Content-type中,設定Type為 application/x-www-form-urlencoded。在這部分要改成
application/json。
n 在Xamarin iOS與Android裡呼叫POST的WebApi
在 Xamarin環境中,要去呼叫POST 動詞的WebApi一樣是使用webClient這個方式。
剛才的Content-type中,要設定為application/json。
public void Callwebapi()
{
var testobj = new Test ();
testobj.value1 = "Value1";
testobj.value2 = "Value2";
//取得資料
var webClient = new System.Net.WebClient();
webClient.Headers.Add("Content-Type", "application/json");
var result = webClient.UploadString("http://ctyl.azurewebsites.net/api/values", "POST",JsonConvert.SerializeObject(testobj));
}
參考文獻
Post parameter is always null
http://stackoverflow.com/questions/10984040/post-parameter-is-always-null
MVC4 Web API Rest interface with Multiple Parameters
http://stackoverflow.com/questions/12835074/mvc4-web-api-rest-interface-with-multiple-parameters
如何讓 ASP.NET Web API 無論任何要求都回應 JSON 格式
Parameter Binding in ASP.NET Web API
http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
[Web API][筆記] POST 總是 Nothing 或 null
http://www.dotblogs.com.tw/topcat/archive/2013/04/09/101105.aspx
ASP.NET Web API 參數繫結
http://huan-lin.blogspot.com/2013/01/aspnet-web-api-parameter-binding.html