仅在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/

10-10 21:54