代码之家  ›  专栏  ›  技术社区  ›  Bob Kaufman

ASP.NET:重写为默认文档的路径未按假定方式工作

  •  1
  • Bob Kaufman  · 技术社区  · 15 年前

    我遇到了一个意想不到的行为:

    下面的陈述很有效:

    Context.RewritePath( "~/Default.aspx" );  // redirect to default doc, explicitly
    

    这会给我一个404错误:

    Context.RewritePath( "~/" );  // redirect to default doc, implicitly
    

    正在加载文档 / 在没有进行任何URL重写的情况下从浏览器正确加载文档,因此我认为IIS配置正确,并且 / /Default.aspx 确实是指同一份文件。

    我宁愿使用后一个语句,因为随着时间的推移,默认文档名可能会在IIS中更改。我假设解决方案涉及从IIS检索默认文档名的方法,但是我找不到这样的方法。

    所以我的问题是:重写URL时,指定默认文档的正确方法是什么?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Stephen M. Redd    15 年前

    您的问题是,在将控制权移交给ASP.NET之前,IIS会处理“默认文档”的路径转换。

    当浏览器请求没有文件名的URL时,IIS将检查为该站点配置的“默认文档”列表。然后,它在请求的路径中查找与配置的默认文档名称匹配的物理文件。然后返回磁盘上物理存在的第一个匹配的默认文档。

    在此之后,如果请求的文件是ASP.NET文件,它将调用ASP.NET运行时并将处理移交给ASP.NET。

    您的URL重写发生在ASP.NET进程中。它不知道IIS在默认文档等方面的设置。当使用一种完全在ASP.NET中进行的URL重写技术时,不能使用默认文档等。所以始终使用页面名称重新编写。