gpt4 book ai didi

asp.net - 有人可以向我解释 asp.net 路由语法吗?

转载 作者:行者123 更新时间:2023-12-03 10:42:01 24 4
gpt4 key购买 nike

我正在 Web 窗体场景中处理此代码:

  public static void RegisterRoutes(RouteCollection routes)
{

Route r = new Route("{*url}", new MyRouteHandler());
routes.Add(r);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.gif/{*pathInfo}");

}

首先,谁能告诉我 {*pathInfo} 的定义在哪里?
http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns并没有真正定义它。做:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

比赛
/c/xyz.axd and 
/b/c/xyz.axd and
/a/b/c/xyz.axd

然而
routes.IgnoreRoute("{resource}.axd");

只匹配
/xyz.axd

其次,在:
{*url}

这是什么意思?整个表达是什么意思。有没有什么地方清楚地解释过?

第三,我需要添加这些表达式以正确忽略路由的特定顺序吗?我知道 {*url} 是某种笼统的东西,如果 IgnoreRoutes 出现在它之前或之后,例如
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.gif/{*pathInfo}");
Route r = new Route("{*url}", new MyRouteHandler());
routes.Add(r);

最佳答案

我的 2 美分:
路由不是正则表达式。它只是组成路由的可变和静态组件,由段分隔(由斜线标识)。有一个特殊符号,最后一个变量中的星号,这意味着从这里开始,忽略段分隔符——斜线。所以,

{*url} 

是最简单的路由,因为这意味着获取整个 URL,将其放入变量 'url' 中,然后将其传递给与该路由关联的页面。
{controller}/{action}/{id}

将第一段中的所有内容——直到第一个斜杠——放入变量“ Controller ”中,将第一个和第二个/之间的所有内容放入变量“ Action ”中,以及第二个和第三个斜杠(或结尾)之间的所有内容进入变量“id”。然后将这些变量传递到关联的页面中。
{resource}.axd/{*pathInfo}

在这里,将 .axd/之前的信息(它不能有任何斜线!)放入“资源”,并将第一个/之后的所有内容放入“路径信息”。由于这通常是一个ignoreRoute,所以它不是传递给关联的页面,而是由Stop​​Handler处理,这意味着路由不会处理它,而是由非路由HttpHandler处理。

正如 bleevo 所说,路由是按照将它们添加到集合中的顺序执行的。所以在处理通用路由之前必须添加 IgnoreRoute 。

这是马的嘴: http://msdn.microsoft.com/en-us/library/cc668201.aspx

具体到您的示例,我会将 IgnoreRoute 行放在您的 Route 添加之上,因为您的路线实际上是一个包罗万象的路线。另外,请记住,仅当 gif 位于根目录中时才会忽略 .gif。

关于asp.net - 有人可以向我解释 asp.net 路由语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3156204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com