发布到其他服务器时,URL路由不起作用

时间:2009-09-03 15:12:16

标签: asp.net iis-6 asp.net-3.5 url-routing

我已使用以下规则实施了网址路由:

    string virtualPath = "~/" + requestContext.RouteData.Values["page"].ToString();

    //if virtualpath doesn't end in aspx, then it's just a directory path loading
    //default.aspx by default.
    if (!virtualPath.EndsWith(".aspx") && !virtualPath.EndsWith(".txt"))
    {
        virtualPath += "default.aspx";
    }

    return BuildManager.CreateInstanceFromVirtualPath(
            virtualPath, 
            typeof(Page)) as Page;

只要它在我在asp.net开发服务器下运行的开发机器上就可以正常工作。

例如,以下网址:localhost:3328 / en / Products / 将加载位于/ Products /下的default.aspx / en /目录显然不存在。

然而,在发布到qa.mysite.com时无法加载 所以当你去qa.mysite.com/en/Products时它会失败 它找不到404页面。

如果我去qa.mysite.com/en/Products/default.aspx

所以这不是真正的url路由不起作用,我认为这是一些设置?我正在运行iis6。

1 个答案:

答案 0 :(得分:0)

Trick是IIS6默认情况下不会执行asp.net管道,因此调用/ en / products /会转到IIS 404错误,而不会让你的路由器有机会启动。

您需要做的是使用通配符映射(许多共享主机和网络管理员类型不喜欢这个)或使用旧的“设置404页面来使用asp.net捕获所有请求”技巧。通配符是更好的选择,尤其是路由选择。我没有尝试过那里的404技巧,但总的来说它应该有效。