“405 方法不允许” - 使用 ASP.NET jQuery ajax POST 时

Posted

技术标签:

【中文标题】“405 方法不允许” - 使用 ASP.NET jQuery ajax POST 时【英文标题】:"405 Method not allowed" - when using ASP.NET jQuery ajax POST 【发布时间】:2012-04-30 22:28:28 【问题描述】:

我已经搜索了大量与类似问题相关的现有 SO 问题,但我无法找到与我的问题相关的任何内容。

我有以下 jQuery 代码:

$.ajax(
   url: "Index.aspx/DeclineRequest"
   , type: 'POST'
   , contentType: 'application/json; charset=utf-8'
   , dataType: 'json'
   , data: JSON.stringify( RequestId: requestId )
);

我正在使用一种非常相似的技术在另一个 ASP.NET Web 应用程序上发布数据,并且效果很好。但是,此应用程序返回以下错误:

“NetworkError: 405 Method Not Allowed - http://localhost:57255/.....”

我找不到这两个应用程序有什么不同,所以我很困惑为什么这不起作用。

我能想到的这两个应用程序之间的唯一区别是,可以运行的是 .NET 2.0,而不能运行的是 .NET 3.5。

我已尝试将以下内容添加到我的 web.config,但仍然收到相同的 405 错误:

<webServices>
   <protocols>
     <add name="HttpPost"/>     
     <add name="HttpPostLocalhost"/>   
   </protocols>      
</webServices>

我该如何解决这个问题?

更新 (16:40): 我已将此应用程序移至 IIS,并且不再返回 405 错误。然而,我们的开发环境只是 localhost。为什么这只会在 localhost 上出错?

【问题讨论】:

你能告诉我们你的DeclineRequest方法吗? 和***.com/questions/7430492/…类似吗?? @ŁukaszW.pl DeclineRequest 方法目前只是调用return "Hello World"。我认为这不是问题,因为键入任何方法名称都会返回相同的错误。我故意在一些测试中拼错了这个方法来检查这个。 【参考方案1】:

可能迟到了,但请尝试添加到您的 Web.Config 文件中:

< handlers >
   ....
       < remove name="WebDAV" />
   ....
< /handlers >

这篇文章解释了可能导致问题的原因:

http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

【讨论】:

【参考方案2】:

从您的代码中删除此代码 dataType: 'json' 并运行

【讨论】:

这绝对不是正确的答案。数据类型与 CORS 错误无关。【参考方案3】:

我的猜测是:在请求中,您说返回的内容将是 JSON,但您返回的纯字符串格式不正确...尝试返回正确的 JSON 或将内容类型更改为纯文本以进行测试...

【讨论】:

【参考方案4】:

检查你发送到服务器的请求deployRequest的参数是一个属性为RequesId的对象或 string(或其他数据类型)名称RequestId 因为在后一种情况下,您可以将数据发送为JSON 或像RequestId=requestId 这样的纯字符串 所以尝试用更合适的东西替换JSON.stringify( RequestId: requestId )

【讨论】:

即使不发送任何参数,我也会遇到同样的问题 那里的参数类型到底是什么?它是某种不可为空的类型吗?【参考方案5】:

POST 方法经常会出现 405 错误。您可能试图在网站上引入某种输入表单,但并非所有 ISP 都允许处理表单所需的 POST 方法。

所有 405 错误都可以追溯到 Web 服务器的配置和管理网站内容访问的安全性,因此您的 ISP 应该很容易解释。

http://www.checkupdown.com/status/E405.html

我会打开 IIS Logging 来检查请求。也让 Fiddler 看看幕后发生了什么

【讨论】:

目前我只是通过localhost 使用 VS 2010 执行此操作,所以我没有任何 IIS 日志记录。 我发现 IIS 和 VS 的工作方式有很多不一致之处。我会尝试设置 IIS 主机并从那里开始。 这对我的其他应用程序来说工作正常,运行在同一台机器上,代码几乎相同。所以安装 IIS 似乎不是解决方案。 好的。但是您仍然可以获取 Fiddler 并检查请求/响应 我已经下载了 fiddler,但它并没有比 FireBug 告诉我更多的信息【参考方案6】:

url: "Index.aspx/DeclineRequest" 不应该是 url: "Index.aspx?DeclineRequest" 应该吗?

很抱歉这个相当明显的建议,我以前从未见过这样的网址。你在重写吗?

【讨论】:

这是一种WebMethod调用格式,调用Index.aspx代码隐藏中定义的DeclineRequest方法。

以上是关于“405 方法不允许” - 使用 ASP.NET jQuery ajax POST 时的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 2.2 WebAPI 405 方法不允许

如何将对象数组发送到服务器。 Asp.Net Core 3.1 405 方法不允许

discord.errors.HTTPException:405 方法不允许(错误代码:0):405:方法不允许

405 方法不允许使用 $http 服务 AngularJS

发送文件返回 405(方法不允许)

如何打印错误 405 方法不允许用户使用