此问题仅在 IIS5.1 下存在。我找到了解决问题的方法,但并不令人满意。我只是想知道是否还有其他不太明显的解决方案。
问题是我有一个集成到 ASP.NET MVC2 解决方案中的 ASP.NET AJAX 项目。
我的 .aspx 页面上有一个静态函数,它用 WebMethod 属性标记。我这样调用它:
window.PageMethods.set_path(window.pageURL);
window.PageMethods.EnableEditMode(function (result) {
if (result) {
$find(window.leftPaneID).expand(1);
$('#' + window.startEditButtonID).hide();
$('#' + window.finishEditButtonID).show();
}
});
在 IIS5.1 下,这会导致 404,因为 Global.asax 映射的路由不正确。
因此,我添加了这一行:routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?"});
这很有帮助,但还不够。现在,我收到不允许的 405 POST。我多读了一点书,发现这是因为:
Extension: .* // Executable Path: %windir%\Microsoft.Net\Framework\v4.0.3031\aspnet_isapi.dll
如果我在 IIS 应用程序配置映射中删除此行,我的 PageMethod 将停止 405ing。太棒了!
不幸的是,这完全破坏了 Web 应用程序的 MVC 方面——URL 重写是必要的。
更不幸的是,PageMethods 具有与 MVC 操作相同的扩展名。所以,我不确定该怎么做。
我知道我四处阅读并看到一些人使用 Web 服务来执行此操作。我们正处于发布前的最后阶段测试,在与我的老板交谈后,他不想走这条路,因为我们担心它的复杂性以及需要比预期更多的重新测试。
因此,我正在寻找其他解决方案。是否可以做类似的事情:
routes.MapRoute(
"Dashboard.aspx/EnableEditMode",
"Dashboard.aspx/EnableEditMode"
);
我在预期的页面方法中硬编码并显式处理它们的地方?我知道这很丑陋,但现在这将是一个简单的修复。
感谢阅读
编辑:显然,解决方案是停止支持 IIS5。 :)
最佳答案
编辑: 正如肖恩在下面提到的,有效的解决方案是:停止支持 IIS 5.1 :)
你读过this post吗?斯科特·汉塞尔曼?
关于c# - PageMethod URL 正在重写并且在 IIS5.1 下处理不当。是否有不包括创建 WebService 的修复程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248375/