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

标签 asp.net syntax routing

我正在 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/

相关文章:

routing - 如何在Linux IP路由表中查找?

javascript - 带有 _blank 的常规链接在选项卡中打开,但 JS window.open(url, "_blank");打开一个新窗口?

bash - 在 Bash : [ -n "$var" ] or [ "$var" ] 中测试非零长度字符串

java - Java 中的三点 (...) 语法?意义和转换?

c# - C 和 C# 条件语句的更简单语法

routing - RestKit 0.20.2 路由和映射

c# - 使用 ASP.NET 网格显示分层 xml 数据

c# - 如何检测正在运行 ASP.NET 程序的监视器?

javascript 在 asp.net 的文本框中添加 2 个数字,不起作用

ruby-on-rails - 如何在 Rails 路由中使用正则表达式进行重定向?