使用来自 android return 的 Get 方法请求 MVC4 WEB API 405
request to MVC4 WEB API with Get method from android return 405
我有 ASP.Net MVC4 WEB API,托管在本地 IIS 中。
我使用 GET 方法从 android 请求 api。响应是 405 不允许操作。
我在控制器中有这个方法:
public IEnumerable<Table> GET()
{
return _repository.GetAll();
}
但是当我将方法更改为POST时:
public IEnumerable<Table> POST()
{
return _repository.GetAll();
}
并使用 POST 方法从 android 请求。
我得到了结果。
我使用相同的路由请求 GET 和 POST。
'/api/tables'
在android项目中,我使用HttpUrlConnection请求API。
try{
URL url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000 /* milliseconds */);
conn.setConnectTimeout(7500 /* milliseconds */);
conn.setRequestProperty("Accept", "application/json");
conn.setRequestMethod(method);
conn.setDoInput(true);
if(method == "POST")
conn.setDoOutput(true);
if(params != null){
// Get OutputStream for the connection and
// write the parameter query string to it
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getURLEncodedString(params));
writer.flush();
writer.close();
}
// Starts the query
conn.connect();
我做错了什么?
信息:
当来自浏览器的请求获取方法 return 结果和 Post 方法 405。
可能是路由问题。对 webapi
的 WebApi.config 做一些小改动
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这里更重要的一点是,使用这种路由方式,您必须使用属性来指定允许的 HTTP 方法(如 [HttpGet]
)。
问题出在我的android项目
Android Developer: HttpUrlConnection
HttpURLConnection uses the GET method by default. It will use POST if
setDoOutput(true) has been called.
我有 ASP.Net MVC4 WEB API,托管在本地 IIS 中。 我使用 GET 方法从 android 请求 api。响应是 405 不允许操作。
我在控制器中有这个方法:
public IEnumerable<Table> GET()
{
return _repository.GetAll();
}
但是当我将方法更改为POST时:
public IEnumerable<Table> POST()
{
return _repository.GetAll();
}
并使用 POST 方法从 android 请求。
我得到了结果。
我使用相同的路由请求 GET 和 POST。
'/api/tables'
在android项目中,我使用HttpUrlConnection请求API。
try{
URL url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000 /* milliseconds */);
conn.setConnectTimeout(7500 /* milliseconds */);
conn.setRequestProperty("Accept", "application/json");
conn.setRequestMethod(method);
conn.setDoInput(true);
if(method == "POST")
conn.setDoOutput(true);
if(params != null){
// Get OutputStream for the connection and
// write the parameter query string to it
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getURLEncodedString(params));
writer.flush();
writer.close();
}
// Starts the query
conn.connect();
我做错了什么?
信息:
当来自浏览器的请求获取方法 return 结果和 Post 方法 405。
可能是路由问题。对 webapi
的 WebApi.config 做一些小改动config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这里更重要的一点是,使用这种路由方式,您必须使用属性来指定允许的 HTTP 方法(如 [HttpGet]
)。
问题出在我的android项目
Android Developer: HttpUrlConnection
HttpURLConnection uses the GET method by default. It will use POST if setDoOutput(true) has been called.