请求的资源不支持 HTTP 方法“GET”

Posted

技术标签:

【中文标题】请求的资源不支持 HTTP 方法“GET”【英文标题】:The requested resource does not support HTTP method '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 
);

【问题讨论】:

【参考方案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。多么令人沮丧。

以上是关于请求的资源不支持 HTTP 方法“GET”的主要内容,如果未能解决你的问题,请参考以下文章

WebApi Post 方法总是返回“请求的资源不支持 http 方法 'GET'。”状态:405 方法不允许

ASP.NET Web API - 请求的资源不支持 http 方法“GET”

请求的资源不支持 http 方法“GET”。错误代码 405

请求的资源不支持 Visual Studio 2010 中的 HTTP 方法“GET”

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 并且请求的资源不允许指定的 HTTP 方法

请求的资源不支持使用 Alamofire 的 http 方法“T”(或“ST”)