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


102

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

Answers:


226

请使用System.Web中的属性。WebAPI操作上的Http名称空间:

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

它之所以不起作用是因为您使用了来自MVC名称空间 的属性System.Web.MvcSystem.Web.Http命名空间中的类用于WebAPI


11
该死的..谢谢!我快要疯了,哈哈,令人难以置信,你怎么能浪费时间在这么小的事情上..
Rushino 2012年

1
实际上,在这里肯定有必要解释为什么这是正确的答案!
Jaxidian

6
编辑的答案和解释。
麦琪颖

2
我可以在RouteConfig.cs中指定[System.Web.Http.AcceptVerbs(“ GET”,“ POST”)]和[System.Web.Http.HttpGet],以便无需在每个API中添加它。
Girish Gupta

8
为什么我只需要在这个项目的10个api中执行一项操作?我以与其他9种API完全相同的方式创建了该API。真令人沮丧
Dan Beaulieu


3

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

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

祝福你:) +1
Shai Cohen

2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.