【问题标题】:405 Method not allowed - Web api within MVC Project405 方法不允许 - MVC 项目中的 Web api
【发布时间】:2017-03-18 13:33:15
【问题描述】:

我在尝试对我的 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);
                            });

这是我的 web 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();
    }

【问题讨论】:

  • 你是否在你的路由中设置了一个断点来查看它是否被命中?
  • 什么都没有被击中,我得到的只是 405 方法未找到。如果我向同一个控制器、不同的功能发帖,它工作正常......它唯一的 http 放置和删除。
  • 那么需要配置路由以响应 PUT 请求。您可以编辑您的帖子以包含您的后端代码吗?
  • 好的,我已经添加了。
  • 如果你的控制器定义为class MyController,那么URL应该只使用/My/...,而不是/MyController/...。

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


【解决方案1】:

请看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>

【讨论】:

    【解决方案2】:

    将您调用的 URL 改为“/api/Account”。

    您不需要“控制器”或“密码更改”。它应该只根据方法名称中的“Put”一词和您使用的 HTTP 方法自动将控制器名称(不带 Controller 一词)映射到 PutPasswordChange 方法。

    您甚至可以将控制器方法重命名为简单的“Put”,这样就可以了。

    注意根据您的浏览器和服务器组合,在处理 PUT 和 DELETE 时,您可能还需要围绕启用 OPTIONS 请求做一些事情,但这是一个完全独立的主题。

    【讨论】:

    • 这些只是示例。我知道如何正确调用控制器。它的其他东西正在破坏它,因为除了 put 和 delete 工作正常。我以前从来不需要配置任何东西来让它工作。这就是为什么我很困惑为什么它现在不起作用。
    • @Dylan 您是否真的尝试过更改 URL 结构以仔细检查这不是问题?这就是我一直这样做的方式,并且我有很多使用我刚刚描述的约定的工作示例。就您发布的内容而言,我个人看不出与代码有关的任何其他问题。
    • @Dylan 你也确定是 PUT 调用给出了 405,而不是前面的 OPTIONS 调用?您是否在任何不同的服务器环境中尝试过?
    • 我已经按照您的方式进行了尝试,得到了同样的结果。 "请求的资源不支持 http 方法 'PUT'。"
    • @Dylan 我的第二条评论呢?您是否排除了这些潜在问题?
    猜你喜欢
    • 2014-06-11
    • 2013-03-21
    • 1970-01-01
    • 2014-12-26
    • 2018-02-04
    • 2016-03-23
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多