“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:方法不允许