为什么IIS通配符映射打破我的Ajax电话?
-
13-09-2019 - |
题
我正在尝试使用jQuery进行一些Ajax电话,但是由于我在IIS 6中有通配卡映射(至.NET),因此似乎不起作用。禁用映射使一切都神奇地工作。
我已经将Web方法属性放在.aspx页面和.ASMX Web服务中的方法上,但两者都不起作用。这是我用于AJAX调用的示例URL:
localhost/UserChecker.aspx/CheckIfUserEmailsExists
localhost/UserChecker.asmx/CheckIfUserEmailsExists
我认为一定是一种方法.NET正在解释URL,但我不确定为什么。更重要的是,除了禁用通配符映射外,我不确定如何修复它!还有其他方法吗???
更新
我正在使用的CMS(Kentico)进行了一些URL路由,但是即使我跳过了Global.asax.cs代码中的路由,我仍然得到404。
提前致谢!
解决方案
IIS上的通配符映射将首先通过通配符处理程序运行初始请求。这将在您的CMS重写(或URL路由)之前完成。
我认为这就是为什么您获得404的原因。
您还可以尝试在通配符映射上禁用“验证文件存在”复选框,以适应该方案,何时将实际的URL稍后重写为其他东西。
其他提示
这不是一个完整的答案,但我希望它将您指向解决方案的方向。
您是否尝试过直接在浏览器中访问URL并使用一些放置良好的断点来跟踪问题?
如果您获得404,听起来您的路由规则不起作用。
如果您可以提供有关您看到的行为的更多信息,我将更新此信息
更新
我认为可能发生的事情是:
您正在为您的文件提供分开的映射(在这些情况下.aspx和.ASMX):
localhost/userChecker.aspx/checkifuseremailsexists
localhost/userChecker.asmx/checkifuseremailsexists
当您关闭外卡映射时,正在使用这些映射,并且使用或忽略了“/checkifuseremailsexists”。当您打开通配符映射时,您的路由不会通知您的应用程序如何正确“路由”。
如果您删除了扩展名(带有通配符映射打开),是否有以下工作?
localhost/userchecker/checkifuseremailsexists
将适当的URL添加到排除列表中:在“网站管理器”选项卡中使用“排除URL”设置。 ((基本帮助文档)
我建议检查CMS框架外的URL;问题必须与URL路由有关。没有通配符映射,它的工作原理没有。
要理解的问题:1。在没有通配卡映射的情况下尝试时,您的CMS运行? 2.该CMS系统如何与IIS相互作用; iaspi dll?还是HTTP处理程序/模块?