编程语言
首页 > 编程语言> > c#-WebApi(MVC 5)PUT方法不允许使用HTTP / 1.1 405方法

c#-WebApi(MVC 5)PUT方法不允许使用HTTP / 1.1 405方法

作者:互联网

我的Android应用程序需要将一些数据更新到服务器,为此我编写了一些WebApi代码以用于更新和从我的Android应用程序发送数据.
当我在本地服务器上测试时,两者都可以正常工作,但是在上传到全局后,它不起作用并给出如下错误:(在android app和fidler中都进行了测试)

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Content-Type: text/html
Server: Microsoft-IIS/8.0

我在Android和C#中都使用了简单的代码:

Android代码:

            HttpClient client  = new DefaultHttpClient();
            HttpPut post = new HttpPut(PUT_SETTINGS_DATA);
            try {
                JSONStringer vm = new JSONStringer().object().key("UserId")
                        .value(UserId).key("IsGPSOn").value(String.valueOf(isServiceOn)).endObject();
                post.setHeader("Accept", "application/json");
                post.setHeader("Content-type", "application/json");

                StringEntity entity = new StringEntity(vm.toString());
                post.setEntity(entity);
                HttpResponse response = client.execute(post);
                BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                String vv = "";
                while((vv = br.readLine()) != null){
                    Log.v("Response Count", vv+" "+UserId);
                }

            } catch (JSONException e1) {
                e1.printStackTrace();
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

WebApi代码:

    [HttpPut]
    public int Put(SettingsVM vm)
    {
        using (var db = new ApiDBContext())
        {

            string sqlQry = "Select COUNT(ID) FROM Settings WHERE UserId= '" + vm.UserId + "'";
            var count = db.Database.SqlQuery<Int32>(sqlQry).SingleOrDefault();
            if (count != 0)
            {
                string sql = "Update Settings Set IsGPSOn={1} where UserId={0}";
                count = db.Database.ExecuteSqlCommand(sql, new object[] { vm.UserId, vm.IsGPSOn });
                db.SaveChanges();
            }
            else
            {
                string sql = "INSERT INTO Settings(UserId,IsGPSOn) VALUES({0},{1})";
                count = db.Database.ExecuteSqlCommand(sql, new object[] { vm.UserId, vm.IsGPSOn });
                db.SaveChanges();
            }
            return count;

        }

    }

我已经检查并测试了所有可能的解决方案来解决此错误.但是面临同样的问题.

谢谢

解决方法:

从您的帖子中可以看到,您正在使用IIS / 8.0.错误405:PUT不允许使用方法,并且DELETE动词也是此环境的众所周知问题.

所有证据似乎都围绕着称为WebDAV的IIS模块的干扰.您将需要全局卸载它或在项目中本地禁用它.另外,您可能需要编辑applicationhost.config文件以允许使用PUT动词.

如果您知道不需要WebDAV,最好完全禁用它或从IIS卸载它.但是,如果您不知道自己或共享服务器的其他人是否需要它,那么最好在项目中本地禁用不需要的功能,以免给其他人造成问题.

我可以在这里重复另一个SO Q& A,或者您可以看看this questionnon-accepted answer to this question的公认答案.

人们通常不喜欢基于链接中包含的信息的答案,但是由于它们都在SO中,因此我希望只要您的问题处于活动状态,他们就可以保持活动状态.如果您发现任何有用的信息,请考虑对其进行投票.

最后,此代码(SO外部)link还说明了如何从IIS角色和功能配置中全局卸载WebDAV功能.

标签:asp-net-web-api,put,server-error,c,android
来源: https://codeday.me/bug/20191121/2052759.html