ASP.NET 中的路由处理
我正在使用 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 模式几乎没有差异,我们应该仍然能够处理它。
I am working in ASP.NET WebForms and C#.
I am trying to add routes for different pages. This is sample code from my global.asax which registers Routes
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")));
}
It works fine. And if we open url like /Admin/Users/Update/1 it opens the edit form nicely.
But problem starts if don't follow the pattern or make any change. Like if we enter
/Admin/Users/Update/1/2
or
/Admin/Users/Update/
it will simply show a 404 page.
Do you know any way how can we handle it? So that if there is little difference in url pattern, we should be able to still handle that.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,如果您指定一个模式并要求路由处理程序查找它,它只会查找该模式。该框架遵循您的规则。
您的选择是
1)找出所有不同的可能模式并注册路由(您可能可以使用 /1/2 等的一些 id)。
2)可以为路由规则指定正则表达式。请查看此处。
3) 查看开源 url 重写器 。它可能会给你你想要的..示例这里。
4) 跳过路由并使用您自己的 http 模块,该模块位于管道中侦听请求并自行处理。您可能仍然可以通过阅读路由处理程序部分并应用它来利用内置路由。我不确定但值得一试。
Well, if you specify a pattern and ask the route handler to look for it, it is only going to look for that pattern. The framework follows your rules.
Your options are
1) find out all the different possible patterns and register the routes (you can probably use some id for /1/2 etc).
2) You can specify regular expressions for routing rules. Look here.
3) check out the open source url rewriter . it may give you what you want.. sample here.
4) skip the routing and use your own http module that sits in the pipeline listening for requests and handle it yourself. You can probably still leverage the built in routing by reading the route handler section and applying it. I am not sure but worth a try.