使用 HTTP POST 在 Android 中使用 ASP.NET WebApi HTTP 服务

Consume ASP.NET WebApi HTTP service in Android with HTTP POST

我已经实现 ASP.NET WebApi 并使用 HTTPPOST 在 Android 应用程序中使用。无参数方法可以完美地调用,但是带有参数的方法在 Google Chrome 中与 Advanced Rest Client 一起工作时无法正常工作,也可以与 HTTP GET 完美地工作。

Android中的来电代码:

String url = "http://192.168.15.3/api/user"    

HttpPost postMethod = new HttpPost(url);

postMethod.setHeader("Content-Type", "application/json; charset=utf-8");
postMethod.setHeader("Accept", "*/*");
postMethod.setHeader("Accept-Encoding", "gzip, deflate");
postMethod.setHeader("Accept-Language", "en-US,en;q=0.8");

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id", "1"));

DefaultHttpClient hc = new DefaultHttpClient();         
HttpResponse response;
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
response = hc.execute(postMethod);
HttpEntity entity = response.getEntity();               
InputStream inStream = entity.getContent();
String result = convertStreamToString(inStream);
Log.e("Result: ", result);              

控制器:

public class UserController : ApiController
{
    UserCredentials[] users = new UserCredentials[] 
    { 
        new UserCredentials { User_ID = "1", User_Name = "testuser", Password = "test", First_Name = "Test", Last_Name = "User",
                              Email = "testuser@dummy.com", Phone ="123456789", Mobile = "123456789", User_Type = "user" }, 
        new UserCredentials { User_ID = "2", User_Name = "testuser2", Password = "test", First_Name = "Test", Last_Name = "User",
                              Email = "testuser2@dummy.com", Phone ="123456789", Mobile = "123456789", User_Type = "user" }
    };

    [AcceptVerbs("POST")]
    public IEnumerable<UserCredentials> GetAllUsers()
    {
        return users;
    }

    [AcceptVerbs("POST")]
    public IHttpActionResult GetUser(string id)
    {
        var user = users.FirstOrDefault((p) => p.User_ID.Equals(id));
        if (user == null)
        {
            return NotFound();
        }
        return Ok(user);
    }
}

错误: {"Message":"No HTTP resource was found that matches the request URI 'http://192.168.15.3/api/user'.","MessageDetail":"No action was found on the controller 'User' that matches the request."}

它抛出错误,因为您的控制器没有任何匹配的 httppost 方法。您正在尝试将 post 数据发送到接受 GET 请求的方法。

WebApi 使用基于约定的方法名称。您的方法以 "Get" 开头,因此它将以以下方式映射请求:

获取所有用户 - 获取 - /api/users 通过 Id 获取用户 - GET - /api/users/id

因此您可以使用 HttpGet 请求而不是 POST 调用它们。