11

我在 ASP.NET webmethod 上有以下 jQuery 帖子:

$.ajax({
    type: "POST",
    url: "AjaxWebMethods.aspx/UpdNote",
    contentType: "application/json; charset=utf-8",
    data: "{'ID' : '" + id + "', 'note' : '" + note + "' }",
    dataType: "json",
    success: UpdNote_Success,
    error: AjaxError
});

并声明了 web 方法:

[System.Web.Services.WebMethod(enableSession: true)]
public static int UpdNote(int ID, string note) {
    // business logic that eventually returns a number, but simplifying
    // ... for the sake of brevity
    int retNum = 99;

    return retNum;
}

jQuery post 和 web 方法都在 Windows Authenticated 环境中工作得很好(即 ​​- 用户通过 LDAP 进行身份验证)。但是,我最近不得不将网站移动到使用 RSA(双因素身份验证、pin 和令牌代码)对用户进行身份验证的服务器上,以便访问该网站。我现在看到的是我所有的 jQuery 帖子都返回“405 错误”。

显然,跨站点请求浮现在脑海,但这里没有发生。所有 jQuery AJAX 帖子都使用在 AjaxWebMethods.aspx 中声明的 Web 方法,该页面位于站点自己的域中。

提前感谢您的任何帮助或建议!

编辑:

在 IE8 中使用 Fiddler 为我提供了更多信息。它返回的错误代码仍然是 405,但服务器错误更具描述性。服务器错误是“不允许使用用于访问路径 '/AjaxWebMethods.aspx/UpdNote' 的 HTTP 动词 POST。”

我确实尝试将 ajax 请求的类型参数更改为 GET,但我得到了 404(找不到资源)。

另外,忘了提到这是通过 SSL 的(尽管我不希望这会有所作为)。

编辑:

经过广泛的测试(以及来自 stackoverflow 的精明成员的广泛帮助),我确定 405 错误与网站正在使用的应用程序池直接相关,更具体地说,与为应用程序池选择的托管管道模式有关。

如果我使用针对 v4.0(.NET 框架)和集成(托管管道模式)的应用程序池,那么我的 AJAX 帖子就可以正常工作。但是,如果我使用针对 v4.0 和 Classic(托管管道模式)的应用程序池,则会收到 405 错误。

所以在这一点上,我仍在寻找这个问题的解决方案,尽管我已经能够解决这个问题。

4

5 回答 5

3

基于此:

jQuery post 和 web 方法都在 Windows Authenticated 环境中工作得很好(即 ​​- 用户通过 LDAP 进行身份验证)。但是,我最近不得不将网站移动到使用 RSA(双因素身份验证、pin 和令牌代码)对用户进行身份验证的服务器上,以便访问该网站。我现在看到的是我所有的 jQuery 帖子都返回“405 错误”。

很明显,该错误与服务器配置有关,但要完全确定,如果可以,请在 RSA 服务器中创建一个新站点并为此站点禁用 RSA 身份验证,请尝试浏览您的站点以绝对确定该错误仅与 RSA 身份验证有关,丢弃新服务器中缺少的与代码相关的组件/配置

一旦你放弃了与代码相关的配置问题,我会鼓励你仔细检查你的 RSA 配置(这可能很棘手)。曾经我在一个项目中使用 RSA 安全性来实现跨服务器的 SSO。(单点登录),我记得在服务器级别安装了一个 RSA ISAPI 过滤器,该过滤器负责读取/设置身份验证 cookie,以便针对 Active Directory 服务器对每个请求进行身份验证。

由于每个请求都由此过滤器管理,并且此 ISAPI 过滤器位于管道的顶部,因此每个请求都必须首先由 RSA ISAPI 过滤器处理才能进行身份验证

所以我的建议是仔细检查 RSA 配置,以检测是否有东西阻止了你的 AJAX 帖子

我记得 RSA 配置就像一个黑魔法盒,我们没有足够的文档,配置它是一个 PITA。我真诚地希望您的组织不是这种情况

于 2012-07-01T22:09:42.770 回答
1

405 HTTP 代码是“不允许的方法”代码。因此,您的新架构中有一些不正确的设置。这肯定是服务器配置错误。此错误可能源于许多地方,如果无法访问您的服务器,其他人将很难告诉您发生了什么。但也许我可以给你一些起点......

你有仔细检查过你的web.config吗?这将是此类错误的常见来源。

你检查过你的 IIS 日志吗?这也是一个非常好的起点。

如果您尝试 POST 而不设置请求的 contentType 会发生什么?也许您的页面未设置为接收 JSON 请求。

您是否尝试过使用提琴手?尝试从外部客户端发送 POST 请求。

更新

还有一些建议:

您是否尝试过禁用 SSL?我会禁用它只是为了确保问题与 SSL 无关。

你在做任何 URL 重写吗?如果是这样,这肯定是相关的。

您可以成功发布到任何 URL 吗?也许 IIS 完全禁用了 POST。如果是这样,这里有一篇文章可以帮助您启用它,这里还有一个可能有帮助的线程。

您是否尝试将 HttpPost 添加到您的web.config? 像这样的东西:

<webServices>
   <protocols>
      <add name="HttpPost" />
   </protocols>
</webServices>
于 2012-07-01T20:09:53.403 回答
0

出于故障排除的目的,请尝试将 AJAX“POST”更改为 AJAX“GET”。在将具有 ajax post 方法的页面从我们的开发环境移动到我们的生产环境后,我遇到了稍微类似的问题。

于 2012-06-29T12:09:11.983 回答
0

HTTP405是服务器错误,而不是代码错误,表示资源(URL)被错误的方法访问。尝试使用 GET 而不是 POST。

于 2012-07-01T20:01:57.467 回答
0

也许您的服务器没有安装 ajax 扩展。尝试标记对CopyLoacal = truebin 文件夹的引用并将其部署到 Web 服务器。

于 2012-07-01T20:19:12.773 回答