【问题标题】:Understanding routing in Global.asax (asp.net-mvc)了解 Global.asax (asp.net-mvc) 中的路由
【发布时间】:2009-07-28 07:39:52
【问题描述】:

在 Global.asax 中,以下是什么意思?

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     

【问题讨论】:

    标签: asp.net-mvc url-routing global-asax


    【解决方案1】:

    这是学习 MVC 的真正令人沮丧的事情之一 - 此功能的文档很糟糕 - 几乎没有任何内容:http://msdn.microsoft.com/en-us/library/dd470170(VS.100).aspx。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    

    这允许所有 something.axd 文件在 MVC 之外运行 - 最后的“{*pathInfo}”允许忽略查询字符串(它是一种通配符)。

    请注意,这不会将任何此类通配符应用于路径,因此:

    trace.axd?clear=1 //excluded from MVC
    
    mySubFolder/customResource.axd //MVC passed to mySubFolderController.customResource()
    

    很有帮助。除了“{resource}”和“{*pathInfo}”

    之外,我一直无法找到任何体面的文档来说明什么是支持和不支持作为关键字的关键字

    但是,有一个几乎完全未记录的功能可以让您更好地控制这些被忽略的路由:

    //ignore all WebForms .aspx/.asmx/.ashx calls anywhere
    routes.IgnoreRoute( "{*allaspx}", new { allaspx = @".*\.as[pmh]x(/.*)?" } );
    

    如果您传递带有属性的未初始化对象,该属性将成为您可以在路由中使用的关键字。

    你不能在路由中传递正则表达式,但你可以在这个匿名属性中传递。

    【讨论】:

      【解决方案2】:

      .axd 文件是由 HTTP 处理程序处理的虚拟文件。它们用于(除其他外)向网页提供各种资源,例如为 AJAX 控件自动生成的 javascript 等。

      由于这些是虚拟文件,您不希望路由引擎尝试将这些请求映射到控制器。您需要它们由 ASP.NET 直接执行。

      这就是这条线的目标。

      【讨论】:

        【解决方案3】:

        如果没有这个 ASP.NET 将尝试将所有请求映射到 AXD 处理程序到控制器和操作。拥有 ignoreRoute 意味着 URL 不会按照默认行为将 URL 映射到控制器。

        【讨论】:

          【解决方案4】:

          它告诉路由引擎忽略这个请求并将其留给 ASP.NET Webforms 来处理。

          这对于使用处理程序 elmah.axd 的 ELMAH 日志记录非常有用。

          【讨论】:

            猜你喜欢
            • 2011-06-26
            • 2015-04-06
            • 2012-07-27
            • 2014-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-28
            • 2015-05-10
            相关资源
            最近更新 更多