【问题标题】:How to differentiate between / (the root) and /default.aspx in ASP.NET如何在 ASP.NET 中区分 /(根)和 /default.aspx
【发布时间】:2010-04-05 11:22:09
【问题描述】:

Request.RawUrl 总是返回 /default.aspx 变体。我没有找到任何方法 来区分这些网址。有人知道该怎么做吗? 环境是 IIS 7 上的 .NET 3.5SP1。

【问题讨论】:

    标签: asp.net iis iis-7 url-rewriting


    【解决方案1】:

    在设计我的URL Rewriter 时,我实际上不得不解决同样的问题。它与您甚至可以访问 URL 之前发生的过程有关。要解决这个问题,您必须确保在 IIS 7 中默认页面处理已关闭。因为如果没有默认页面处理,它不会经历尝试将其映射到驱动器的额外步骤,因此您将是请求的确切 URL。但这可能是也可能不是一个选项,具体取决于您是否使用System.Web.Routing

    要关闭默认页面处理,您需要执行以下操作:

    1. 在 IIS 中转到您的站点
    2. 转到默认文档
    3. 点击右上角的禁用

    或者您可以将以下内容添加到您的web.config

    <system.webServer>
        <!-- ... other tags here ... -->
        <defaultDocument enabled="false" />
    </system.webServer>
    

    执行此操作后,默认文档将不再添加到您的 URL。但是请注意,由于它不再处于活动状态,因此您不能依赖 default.aspx 实际映射到您的目录,您必须手动处理此问题或使用 System.Web.Routing 之类的东西来处理此功能.

    要在 IIS 6 中完成相同的操作,您需要打开通配符:

    以下说明适用于 IIS 6。

    1. 打开 IIS 并右键单击网站并选择“属性”。
    2. 单击“应用程序设置”部分下的“配置”按钮
    3. 单击“插入...”按钮以创建新的通配符映射
    4. 将可执行文本框设置为 aspnet_isapi.dll 文件位置。 对于 .net 2.0、3.0、3.5:C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    5. 确保未选中“验证文件是否存在”复选框。
    6. 按“确定”确认并关闭所有窗口。

    注意:顺便说一句,所有源代码都可以在我上面链接的网站上找到,以防你好奇我是如何做事的。

    【讨论】:

    • 我会检查的!不知道你的项目。我用反射器深入研究了 ASP.NET 内部,发现(非常确定)在托管代码启动之前,ASP.NET 获取的 URL(在 IIS7WorkerRequest 内部)已经被 IIS 的本机部分修改。我会调查禁用 apphost 中的许多默认模块。我只是尝试禁用默认文档处理,但它在 cassini 网络服务器中没有任何改变。稍后将在 IIS 中尝试。顺便说一句,IIS + ASP.NET 是一个默认行为的巨大怪物。太可怕了。
    • PS:我想知道您如何支持 asp.net 表单。将查看您的代码。
    • 它不会改变 Cassini 中的任何内容,因为 Cassini 仅遵循标准的 &lt;system.web/&gt; 设置。然而,Cassini 通常可以很好地判断您将在 IIS 7 中看到的内容,因为它是一个纯 .NET 引擎,但它仍然有一些用于 default.aspxindex.aspx 的硬编码,因此应用程序 just work(tm ) 从 Visual Studio 为旧的 ASP.NET 应用程序运行它们时。但是,如果您只是从目录中删除文件,则可以强制它识别没有 default.aspx 的 URL。
    • @usr 好吧,&lt;asp:form/&gt; 如何选择呈现 URL 有几个选项,我已经有一段时间没有搞砸了。在 IIS 6 中使用 &lt;rewriter rebaseClientPath="true|false" /&gt;。我忘记了您是否真的希望truefalse 更改&lt;asp:form/&gt; 的URL。它基于这种方法:msdn.microsoft.com/en-us/library/1kz7fdx9(v=VS.90).aspx 但是在 IIS 7 中我认为它可以正常工作,因为TransferRequest,但请不要引用我的话。
    猜你喜欢
    • 2018-04-24
    • 2020-05-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多