请求的资源不支持 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”