好吧,我正在努力正确地构建这个 HttpPost 东西......我用 mvc 4 构建了一个 ASP.Net web api,目前正在尝试从我的 android 应用程序中的一个 Controller 中提取数据。这是我在 android (java) 中的代码,但我不知道如何正确编写它以与 ASP.Net 交互(如 header 、名称值对等)。我也会发布 Controller 代码。
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();
我的 Controller 如下:
// 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 帖子的 URL 是 http://proopt.co.za.winhost.wa.co.za/api/Course
请帮助我,谢谢。
2017 年更新
使用 RESTful API 与远程数据库交互。您的客户端应用程序应该使用一些基于 token 的身份验证,并且 Retrofit 2.0是用于使用远程 REST API 的绝佳库。
最佳答案
在您的 Java 代码中,您在 APS.NET/MVC 网站中使用 HttpPost
,您发布了 GetCourse
,这是一个“获取”操作。对于 MVC Controller 操作,您必须添加 [HttpPost]
(或者更确切地说是 [HttpPost, ActionName("Create")]
以避免与相同命名的 get 操作发生命名冲突)属性
但这并不真正符合RESTful设计。 要获取数据,您应该始终使用 GET 方法。只有在更新或创建资源(即删除、更新、插入)和“PUT”时才使用“POST”来替换它们。如果您使用 JavaScript(即来自网站),则使用 POST 而不是 PUT,因为 JavaScript 只能处理 POST 和 GET。
因此只需在您的 JavaCode 中使用 HttpGet
并删除 NameValuePair
内容,因为它在 GET 中不是必需的。除此之外,该 coude 似乎还不错,但仅将其用于更改资源的操作。
关于java - 编码 Android/Java 连接到 ASP.Net Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392660/