请求的资源不支持 http 方法 'GET' 但使用 'POST'

Posted

技术标签:

【中文标题】请求的资源不支持 http 方法 \'GET\' 但使用 \'POST\'【英文标题】:The requested resource does not support http method 'GET' but using 'POST'请求的资源不支持 http 方法 'GET' 但使用 'POST' 【发布时间】:2021-12-09 13:46:52 【问题描述】:

我的路线配置正确,因为我已经在其他问题中看到了它。 Web API 使用MapHttpRoute,它使用System.Web.Http。我用[System.Web.Http.HttpPost] 装饰了我的操作,但它似乎不起作用,它返回错误消息:

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

我尝试了这个解决方案[System.Web.Http.AcceptVerbs("GET", "POST")],正如我在同一个问题上看到的那样。 The requested resource does not support HTTP method 'GET' 并且成功了。

但是在 API 帮助页面上,我看到的是

动作的METHODGET,应该是POST

也许我遗漏了一些不应该或应该在我正在使用的操作上实施的内容。

这是我在控制器中的代码。

    [HttpPost, Route("DestroySession/userID", Name = "DestroySession"), AcceptVerbs("GET" , "POST")]
    public async Task<IHttpActionResult> DestroyUserSession(string userID)
    
        SystemResult systemResult = new SystemResult();
        await Task.Run(() => 
            IAbstractLogic<UserInput, SystemResult> systemProcess = new LogoutLogic();
            UserInput userInput = new UserInput
            
                UserID = userID
            ;
            systemResult = systemProcess.doProcess(userInput);
        ).ConfigureAwait(false);
        return Content(HttpStatusCode.OK, new 
         
            message = systemResult.ResultMessage, status = systemResult.ResultCode == 0 
        );
    

这是我的WebApiConfig

       config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );

任何帮助将不胜感激。问候

【问题讨论】:

【参考方案1】:

哇哦!看来我的代码工作得很好。我刚刚在 POSTMAN 中对其进行了测试,它确实有效。我只能说,如果您的请求是 POST 某事。您需要第三方应用程序来测试它。仅在浏览器上进行测试会给您带来很多问题。

【讨论】:

你是如何“在浏览器中测试它”的?您的问题没有详细说明。如果您输入的是 url host.com/api/users/destroysession/1,那么这将是一个 GET。 POST 需要通过脚本或页面上的表单来完成。您可以查看开发工具的网络选项卡以查看发出的请求。并不是说我希望 asp 会对此撒谎.. @CaiusJard,只是将参数的值放在 URL 上。 是的,它总是做一个 GET 呜呜呜……!!!!现在我懂了。谢谢你,先生。 @CaiusJard 顺便说一句,您也许应该删除,因为请求不包含任何正文数据。通常我们使用 POST 或 PATCH 进行更新,使用 DELETE 进行删除,使用 PUT 进行插入。最好尝试将 GET 保留用于不更改任何内容的只读访问。前段时间有一些事情(谷歌?)认为预取页面上的每个 GETtable 内容以加速浏览“以防万一该内容被点击”是一个好主意,这对所有那些 GET 修改的应用程序造成了问题数据..

以上是关于请求的资源不支持 http 方法 'GET' 但使用 'POST'的主要内容,如果未能解决你的问题,请参考以下文章

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”)