【问题标题】:Routes handling in ASP.NETASP.NET 中的路由处理
【发布时间】:2011-07-25 14:06:27
【问题描述】:

我正在使用 ASP.NET WebForms 和 C#。 我正在尝试为不同的页面添加路线。这是我的 global.asax 中注册路由的示例代码

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 模式差异不大,我们应该仍然可以处理。

【问题讨论】:

    标签: c# asp.net .net-3.5 global-asax asp.net-routing


    【解决方案1】:

    好吧,如果您指定一个模式并要求路由处理程序查找它,它只会查找该模式。框架遵循您的规则。

    你的选择是

    1) 找出所有不同的可能模式并注册路由(您可能可以为 /1/2 等使用一些 id)。

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

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

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

    【讨论】:

    • 我们怎样才能做到这一点? “跳过路由并使用您自己的 http 模块,该模块位于管道中侦听请求并自己处理。”
    • 这篇文章解释了如何使用一个自定义的http模块来处理你自己的路由。您可以在“查找”部分指定一些基本模式,在模块中检索它并根据需要对其进行按摩。 msdn.microsoft.com/en-us/library/ms972974.aspx
    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多