【问题标题】:request to MVC4 WEB API with Get method from android return 405使用 android 的 Get 方法向 MVC4 WEB API 请求返回 405
【发布时间】:2015-01-28 05:51:36
【问题描述】:

我有 ASP.Net MVC4 WEB API,托管在本地 IIS 中。 我使用 GET 方法从 android 请求 api。响应是 405 Action not Allowed。

我在控制器中有这个方法:

    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();

我做错了什么?

信息:

当来自浏览器Get Method的请求返回结果和Post Method 405时。

【问题讨论】:

  • 你的控制器的名字是什么
  • controller 是 TablesController,action 的 route 是 'api/tables'
  • 看看我的回答..可能对你有帮助
  • 我找到了答案 - 问题出在我的 android HttpUrlConnection

标签: android asp.net-mvc-4


【解决方案1】:

问题出在我的android项目中

Android Developer: HttpUrlConnection

HttpURLConnection 默认使用 GET 方法。它将使用 POST 如果 setDoOutput(true) 已被调用。

stackoverflow: https://stackoverflow.com/questions/8187188/android-4-0-ics-turning-httpurlconnection-get-requests-into-post-requests

【讨论】:

  • 非常感谢,这真的很有帮助
【解决方案2】:

可能是路由问题。在 webapi 的 WebApi.config 中做一些小改动

config.Routes.MapHttpRoute( 
   name: "ActionApi", 
   routeTemplate: "api/{controller}/{action}/{id}", 
   defaults: new { id = RouteParameter.Optional } 
);

这里更重要的一点是,对于这种路由风格,您必须使用属性来指定允许的 HTTP 方法(如[HttpGet])。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2016-02-21
    • 2017-08-25
    相关资源
    最近更新 更多