【问题标题】:The requested resource does not support HTTP method 'GET'请求的资源不支持 HTTP 方法“GET”
【发布时间】:2012-09-27 18:05:51
【问题描述】:

我的路由配置正确,我的方法有修饰标签。我仍然收到“请求的资源不支持 HTTP 方法 'GET'”消息?

[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
  // Décoder les paramètres reçue.
  string decodedUsername = username.DecodeFromBase64();
  string decodedPassword = password.DecodeFromBase64();

  return "value";
}

这是我的路线:

config.Routes.MapHttpRoute(
    name: "AuthentificateRoute",
    routeTemplate: "api/game/authentificate;{username};{password}",
    defaults: new { controller = "Game",
                    action = "Auth", 
                    username = RouteParameter.Optional, 
                    password = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

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

【问题讨论】:

    标签: c# routing asp.net-web-api


    【解决方案1】:

    通过在访问端点时使用http(s) 解决了这个问题。我访问的路线在http 上不可用。所以我想说验证路由可用的协议。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我已经有 4 个控制器运行良好,但是当我添加这个控制器时,它返回“请求的资源不支持 HTTP 方法 'GET'”。 我在这里和其他几篇相关文章中尝试了所有内容,但对解决方案漠不关心,因为正如 Dan B. 在回答答案时提到的那样,我已经让其他人工作正常。

      我走了一会儿,回来了,马上意识到当我添加控制器时,它嵌套在“控制器”类下,而不是我的其他控制器所在的“ApiController”类下。我假设我选择了错误的脚手架选项来构建 Visual Studio 中的 .cs 文件。所以我包含了 System.Web.Http 命名空间,更改了父类,并且在没有附加属性或路由的情况下一切正常。

      【讨论】:

        【解决方案3】:

        在我的例子中,路由签名与方法参数不同。我有 id,但我接受 documentId 作为参数,这导致了问题。

        [Route("Documents/{id}")]   <--- caused the webapi error
        [Route("Documents/{documentId}")] <-- solved
        public Document Get(string documentId)
        {
          ..
        }
        

        【讨论】:

          【解决方案4】:

          只使用这个属性

          [System.Web.Http.HttpGet]
          

          不需要这行代码:

          [System.Web.Http.AcceptVerbs("GET", "POST")]
          

          【讨论】:

            【解决方案5】:

            请在您的 WebAPI 操作中使用 System.Web.Http 命名空间中的属性:

                [System.Web.Http.AcceptVerbs("GET", "POST")]
                [System.Web.Http.HttpGet]
                public string Auth(string username, string password)
                {...}
            

            它不起作用的原因是因为您使用了来自 MVC 命名空间System.Web.Mvc 的属性。 System.Web.Http 命名空间中的类用于 WebAPI

            【讨论】:

            • 该死的..谢谢!我快要疯了,哈哈,难以置信,你怎么能把时间浪费在这么小的事情上……
            • 确实,这里有必要解释一下为什么这是正确的答案!
            • 已编辑答案并附有解释。
            • 我可以在 RouteConfig.cs 中指定 [System.Web.Http.AcceptVerbs("GET", "POST")] 和 [System.Web.Http.HttpGet] 这样我就不需要添加这个在每个 API 中。
            • 为什么我只需要在这个项目的 10 个 api 中的一个中执行此操作?我以与其他 9 个 api 完全相同的方式创建了 api。多么令人沮丧。
            猜你喜欢
            • 2014-01-28
            • 2015-10-08
            • 2013-07-31
            • 2017-10-17
            • 2013-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-19
            相关资源
            最近更新 更多