此问题仅存在于IIS5.1下。我找到了一种解决问题的方法,但这并不令人满意。我只是想知道是否还有其他一些不太明显的解决方案。
问题是我将ASP.NET AJAX项目集成到ASP.NET MVC2解决方案中。
我的.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将停止405。真棒!
不幸的是,这完全破坏了Web应用程序的MVC方面 - URL重写是必要的。
更不幸的是,PageMethods与MVC操作具有相同的扩展名。所以,我不知道该怎么做。
我知道我读过并看到有些人使用WebServices来做这件事。在发布之前我们正处于测试的最后阶段,在与老板交谈后,他不想走这条路,因为我们担心它的复杂性以及需要重新测试超过预期。
因此,我正在寻找其他解决方案。是否可以做类似的事情:
routes.MapRoute(
"Dashboard.aspx/EnableEditMode",
"Dashboard.aspx/EnableEditMode"
);
我在页面方法中硬编码并明确处理它们?我知道这很难看,但现在这只是一个简单的修复。
感谢您阅读
编辑:显然,解决方案是停止支持IIS5。 :)
答案 0 :(得分:1)
编辑:如下所述,Sean说,有效的解决方案是:停止支持IIS 5.1:)
您是否阅读过Scott Hanselman撰写的this post?
答案 1 :(得分:1)
您是否考虑过将您的经销商升级到IIS Express?如果他们只是在进行演示,那么它应该可以正常工作,并且您将回到目标单个IIS SKU。