4

我有一个HttpModule拦截所有请求并根据路由规则从数据库加载数据。但是,我一直遇到一个问题;GetRouteData仅在路径不存在时才有效:

var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));

假设对 url 有一个请求http://localhost/contact,如果文件系统中不存在该路径,我将获得与该 url 相关的正确路由数据。当我想通过在路径中创建一个 aspx 页面来自定义该 url 处的页面时,就会出现问题~/contact/default.aspx。一旦我这样做,GetRouteData返回null

我什至尝试创建一个新HttpContext对象,但如果页面存在,我仍然无法检索路由数据。

有没有人遇到过这个问题?有解决方案/解决方法吗?

所有帮助将不胜感激。

4

1 回答 1

3

设置RouteCollection.RouteExistingFiles为真。

public static void RegisterRoutes(RouteCollection routes)
{
    // Cause paths to be routed even if they exists physically
    routes.RouteExistingFiles = true;

    // Map routes
    routes.MapPageRoute("...", "...", "...");
}

不过要小心。IIS7 的行为与在 Visual Studio 中调试时使用的服务器略有不同。当我将我的应用程序部署到网络时,我对此有所了解。查看我提交给 Microsoft Connection 的反馈

于 2011-05-01T23:54:16.810 回答