在IIS5.1下,PageMethod URL被重写并且处理不当。是否有针对此的修复,不包括创建WebService?

时间:2011-11-23 20:03:09

标签: c# asp.net-mvc iis asp.net-mvc-routing

此问题仅存在于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。 :)

2 个答案:

答案 0 :(得分:1)

编辑:如下所述,Sean说,有效的解决方案是:停止支持IIS 5.1:)

您是否阅读过Scott Hanselman撰写的this post

答案 1 :(得分:1)

您是否考虑过将您的经销商升级到IIS Express?如果他们只是在进行演示,那么它应该可以正常工作,并且您将回到目标单个IIS SKU。