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

时间:2012-10-07 02:35:41

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

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

5 个答案:

答案 0 :(得分:207)

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

答案 1 :(得分:1)

只需使用此属性

[System.Web.Http.HttpGet]

不需要这一行代码:

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

答案 2 :(得分:1)

在我的情况下,路由签名与method参数不同。我有id,但是我接受documentId作为参数,这导致了问题。

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

答案 3 :(得分:1)

在访问端点时使用http(s)解决了此问题。我正在访问的路由在http上不可用。所以我要说一下验证路由可用的协议。

答案 4 :(得分:0)

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

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