104

我的路线配置正确,我的方法有装饰标签。我仍然收到“请求的资源不支持 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 }
);
4

5 回答 5

234

请使用 System.Web 中的属性。WebAPI 操作上的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

于 2012-10-07T05:45:24.700 回答
4

就我而言,路由签名与方法参数不同。我有 id,但我接受 documentId 作为参数,这导致了问题。

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}
于 2018-11-30T01:26:22.107 回答
3

只需使用此属性

[System.Web.Http.HttpGet]

不需要这行代码:

[System.Web.Http.AcceptVerbs("GET", "POST")]
于 2018-07-30T09:52:29.317 回答
3

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

于 2020-09-03T15:06:55.657 回答
2

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

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

于 2019-01-08T22:52:37.297 回答