【问题标题】:url routing catch-all not workinurl路由包罗万象不起作用
【发布时间】:2011-01-13 12:42:47
【问题描述】:

我自己路由所有请求。我写的模式如下:

RouteTable.Routes.Add(new Route("{*all}", new URLRouter()));

但是当对 www.example.com/styles/site.css 的请求到达时,它并没有被 URLRouter 处理程序捕获。

谢谢。

【问题讨论】:

    标签: c# asp.net azure url-routing


    【解决方案1】:

    安装的是什么 IIS 版本?看起来静态文件请求甚至没有到达 ASP.NET ISAPI 过滤器。这是 IIS6 和 IIS7 经典模式应用程序池中的默认行为。

    更新:在 Web.config(模块部分)中设置 runAllManagedModulesForAllRequests="true"

    【讨论】:

    • 其实我认为这是IIS 6和IIS 7中的默认行为,无论使用什么应用程序池。
    • 感谢 Chris 的回复。这是 Windows azure WebRole 项目。 Azure 使用 IIS7。我怎样才能改变这种行为?这样所有请求,包括静态内容请求都由我的模块 URLRouter 处理。
    • 感谢 Artem 和 Abatishchev,runAllManagedModulesForAllRequests 已经设置好了 :(,并且 catch-all 没有收到所有请求 :S,在 web.config 中设置如下: ...
    • 我什至设置了 RouteTable.Routes.RouteExistingFiles = true;在 RouteTable.Routes.Add(new Route("{*all}", new URLRouter()) ); 之前的 ApplicationStart
    • 也许你可以用URL Rewrite模块实现静态文件路由:msdn.microsoft.com/en-us/library/dd573358.aspx
    【解决方案2】:

    我已经解决了这个问题。问题似乎是所有请求都传递给了我的 URLRouter 处理程序,但是对静态内容(例如样式/site.css)的请求不是由“{*all}”中的 url-parameter-variable “all”收集的,并且全部都是包含 null,虽然奇怪的是,这个请求包含在 requestContext.HttpContext.Request.Url 中。所以,我使用 requestContext.HttpContext.Request.Url 而不是 url-parameter-variable “all”。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2016-08-20
      • 2011-04-02
      • 2016-02-22
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2021-08-17
      相关资源
      最近更新 更多