2013-08-23 81 views
1

好吧,我正在努力正確地構建這個HttpPost的東西......我用mvc 4構建了一個ASP.Net web api,並且當前正試圖從其中一個控制器在我的Android應用程序。這是我在android(java)中的代碼,但我不知道如何正確寫入它與ASP.Net接口(如標題,名稱值對等)。我也會發布控制器代碼。編碼與ASP.Net Web API的Android/Java連接

DefaultHttpClient httpclient = new DefaultHttpClient(); 

    HttpPost httppost = new HttpPost(http://proopt.co.za.winhost.wa.co.za/api/Course); 
    List<NameValuePair> nameValue = new ArrayList<NameValuePair>(); 
    nameValue.add(new BasicNameValuePair("", "")); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValue)); 
    httppost.setHeader("Content-type", "application/json"); 
    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity(); 

而且我的控制器如下:

// GET api/Course/5 
public Course GetCourse(string id) 
{ 
    Course course = db.Courses.Find(id); 
    if (course == null) 
    { 
     throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); 
    } 

    return course; 
} 

我使用的HTTP POST的URL是http://proopt.co.za.winhost.wa.co.za/api/Course

請幫助我,謝謝。

UPDATE 2017

使用一個RESTful API來與遠程數據庫的接口。您的客戶端應用程序應該使用一些基於令牌的身份驗證,並且Retrofit 2.0是用於使用遠程REST API的絕佳庫。

回答

2

在您的Java代碼中,您在您的APS.NET/MVC網站上使用了HttpPost,您已發佈GetCourse這是一個「獲取」操作。對於MVC控制器動作,必須添加[HttpPost](或者更確切地說[HttpPost, ActionName("Create")]避免命名與同名取得動作衝突)屬性

但是,這並不真正符合RESTful設計。 爲獲取數據,您應該始終使用GET方法。只有在更新或創建資源(即刪除,更新,插入)和「PUT」以替換資源時才使用「POST」。如果您使用JavaScript(即從網站),則使用POST而不是PUT,因爲JavaScript只能處理POST和GET。

因此,只需在您的JavaCode中使用HttpGet並刪除NameValuePair的東西,因爲它在GET中不是必需的。除此之外,coude似乎很好,但只能用於改變資源的操作。

+0

謝謝。我現在擔心通過我的web api將數據寫入我的數據庫,這應該很有趣。 –