2011-07-25 31 views
1

我在ASP.NET WebForms和C#中工作。 我想为不同的页面添加路由。这是从我的Global.asax样本代码注册路线在ASP.NET中处理路线

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
    //AppSettings = AppConfig.AppSettings.Settings; 
    //ConSettings = AppConfig.ConnectionStrings.ConnectionStrings; 
} 

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add("Admin_Users_Update", new Route("Admin/Users/Update/{UserId}", new RoutingHandler("~/Forms/Admin/Users/UpdateUser.aspx"))); 
} 

它工作正常。如果我们打开像/ Admin/Users/Update/1这样的URL,它会很好地打开编辑表单。 但如果不遵循模式或进行任何更改,问题就会开始。如果我们输入

/Admin/Users/Update/1/2 

/Admin/Users/Update/ 

喜欢它只会显示一个404错误页面。

你知道我们该怎么处理它吗?因此,如果url模式没有什么区别,我们仍然可以处理它。

回答

1

那么,如果你指定了一个模式,并要求路由处理程序来寻找它,它只会寻找该模式。框架遵循你的规则。

您的选项是

1)找出所有可能的不同图案和注册路线(你大概可以使用一些身份证/ 1/2等)。

2)您可以指定路由规则的正则表达式。看看here

3)查看开源url rewriter。它可能会给你你想要的..样品here

4)跳过路由并使用您自己的http模块,它位于管道中监听请求并自行处理。您可能仍然可以通过阅读路由处理器部分并应用它来利用内置路由。我不确定但值得一试。

+0

我们怎样才能做到这一点? “跳过路由并使用您自己的http模块,该模块位于管道中监听请求并自行处理。” – Riz

+0

本文解释了如何使用自定义http模块来处理您自己的路由。您可以在“查找”部分指定一些基本模式,在模块中检索它并按照需要进行按摩。 http://msdn.microsoft.com/en-us/library/ms972974.aspx –