我正在尝试使用 jQuery 进行一些 AJAX 调用,但是因为我在 IIS 6 中打开了通配符映射(到 .NET),所以它似乎不起作用。禁用映射使一切都神奇地工作。
我已经在 .aspx 页面和 .asmx Web 服务中的方法上添加了 web 方法属性,但都不起作用。这是我用于 AJAX 调用的示例 URL:
localhost/UserChecker.aspx/CheckIfUserEmailsExists
localhost/UserChecker.asmx/CheckIfUserEmailsExists
我认为它一定与 .NET 解释 URL 的方式有关,但我不完全确定原因。更重要的是,我不知道如何修复它,除了禁用通配符映射!有没有别的办法???
更新
我使用的 CMS (Kentico) 做了一些 URL 路由,但即使我跳过 global.asax.cs 代码中的路由,我仍然得到 404。
提前致谢!
4 回答
IIS 上的通配符映射将首先通过通配符处理程序运行初始请求。这将在您的 CMS 进行任何 URL 重写(或 URL 路由)之前完成。
我认为这就是你得到 404 的原因。
您还可以尝试禁用通配符映射上的“验证文件存在”复选框,以适应实际 URL 稍后将被重写为其他内容的情况。
这不是一个完整的答案,但我希望它能为您指明解决方案的方向。
您是否尝试过直接在浏览器中访问 url 并使用一些放置良好的断点来追踪问题?
如果您收到 404,听起来您的路由规则不起作用。
[如果你能提供更多关于你所看到的行为的信息,我会更新这个]
更新
我认为可能发生的事情是这样的:
您正在为带有扩展名的文件(在这些情况下为 .aspx 和 .asmx)提供单独的映射:
localhost/UserChecker.aspx/CheckIfUserEmailsExists
localhost/UserChecker.asmx/CheckIfUserEmailsExists
当您关闭通配符映射时,将使用这些映射,并且“/CheckIfUserEmailsExists”被处理为使用或忽略。当您打开通配符映射时,您的路由不会通知您的应用程序如何正确“路由”。
如果您删除了扩展名(打开了通配符映射),以下工作是否有效?
本地主机/UserChecker/CheckIfUserEmailsExists
将适当的 URL 添加到排除列表:使用站点管理器->设置选项卡中的“排除的 URL”设置。(基本帮助文档)
我建议在您的 CMS 框架之外检查 URl;问题必须与 URL 路由有关。不知道没有通配符映射它是如何工作的。
需要了解的问题: 1.在尝试不使用通配符映射时,您的 CMS 是否正在运行?2、这个CMS系统如何与IIS交互;IASPI DLL ? 还是 HTTP 处理程序/模块?