我在 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 错误。
所以在这一点上,我仍在寻找这个问题的解决方案,尽管我已经能够解决这个问题。