405不允许的方法 - MVC项目中的Web api

时间:2016-11-04 16:19:07

标签: asp.net-mvc asp.net-web-api asp.net-web-api2

尝试在我的Web api控制器中使用角度为$ http.put时,我收到 405 Method not found 错误。

我已经尝试过我能找到的所有内容,主要是与WebDav有关。我还有另外一个Web api项目,我从未遇到过这个问题。下面是我在角度范围内的示例调用。这是令人费解的,我在其他Web api项目的web配置中基本上都是一样的,似乎工作正常。

return $http.put("/api/Account/PasswordChange",{params:{"currentPass":currentPass,"newPass":newPass,"confirmPass":confirmPass}})
                        .then(function (response) {
                            return response.data;
                        },
                            function (response) {

                                return $q.reject(response);
                            });

这是我的网络API路由

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

这里是web api控制器被称为

public IHttpActionResult PutPasswordChange(string currentPass,string newPass,string confirmPass)
    {
        return Ok();
    }

2 个答案:

答案 0 :(得分:0)

将您正在呼叫的网址改为“/ api / Account”。

您不需要“Controller”或“PasswordChange”。它应该根据方法名称中的“Put”和您使用的HTTP方法,自动将控制器名称(没有单词Controller)映射到PutPasswordChange方法。

你甚至可以将控制器方法重命名为“Put”,它会起作用。

N.B。根据您的浏览器和服务器组合,您可能需要在处理PUT和DELETE时执行一些启用OPTIONS请求的内容,但这是一个完全独立的主题。

答案 1 :(得分:0)

请参阅http://www.ryadel.com/en/error-405-methods-not-allowed-asp-net-core-put-delete-requests/ 我不得不添加发布网站web.config:

<modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
</modules>