仅在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操作相同的扩展名。因此,我不确定该怎么办。
我知道我到处阅读,看到一些人使用WebServices来做到这一点。在发布之前,我们正在进行最后的测试,在与我的老板交谈之后,他不想走这条路,因为我们担心它的复杂性以及是否需要重新测试。
因此,我正在寻找其他解决方案。是否可以做类似的事情:
routes.MapRoute(
"Dashboard.aspx/EnableEditMode",
"Dashboard.aspx/EnableEditMode"
);
我在哪里硬编码预期的页面方法并显式地处理它们?我知道这很丑陋,但是目前这只是一个简单的解决方法。
谢谢阅读
编辑:解决方案显然是停止支持IIS5。 :)
最佳答案
编辑:如下所述,肖恩,有效的解决方案是:停止支持IIS 5.1 :)
您读过Scott Hanselman的this post吗?
关于c# - PageMethod URL正在被重写,并且在IIS5.1下不能很好地处理。是否有不包含创建WebService的修复程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8248375/