3

我已经阅读了所有这些关于如何使 system.web.routing 工作的文章,但所有这些文章都在 localhost:port 上进行了解释。我可以在本地机器上让它工作,但是一旦我将网站上传到服务器上,无论我做什么,路由都会停止工作。

首先,我尝试不使用任何扩展名(.aspx),但经过所有努力,我放弃并添加了扩展名,但它仍然无法在服务器上运行。

任何帮助表示赞赏。

样本:

global.ascx

Route test = new Route("home.aspx", new TestRoutingHandler());
Routes.Add(test); 

在路由处理程序中

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
    string virtualPath = string.Empty;
    Route route = (Route)requestContext.RouteData.Route;
    virtualPath = "~/Default.aspx";
    return (Page)BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page));
}

在 httpModules 下的 web.config

add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 

这非常简单,可以在本地机器上运行,但不能在 Web 服务器上运行。

4

2 回答 2

2

对于 IIS7+,我发现添加到 web.config 的部分突然使一切正常:

<modules runAllManagedModulesForAllRequests="true" />

就像在 Cassini Web 服务器上运行的 VS 一样令人困惑,它工作得很好。

于 2010-12-11T17:38:34.940 回答
0

验证 Web 服务器是否已配置为使用 ASP.NET(也称为通配符处理程序)处理所有请求。如果不是,则仅当请求的确切路径对应于磁盘上的物理文件并具有 .aspx 扩展名时,它才会通过 ASP.NET 处理请求。显然,路由概念完全不满足第一个条件,通常是第二个条件。

Phil Haack对如何在IIS 6中执行此操作进行了很好的演练

对于IIS 7,您只需要在 web.config 的 system.webServer 下指定正确的模块和处理程序。

于 2009-05-23T00:25:53.453 回答