2

网址路由和 IIS7 03-24-2011 04:24 PM

你好,

我对 asp.net 4.0 和 IIS7 中的 Url Routing 有疑问。下面我解释了我的网站结构是什么以及它是如何在 IIS7 中配置的。

目录结构:

1.我的网站>索引.aspx

2.我的网站>关于我们>Index.aspx

3.我的网站>ContactUs>ContactUs.aspx

II7 配置:

我已将应用程序的默认文档配置为 Index.aspx 现在,当我访问以下 url 时,IIS7 自动执行很少的路由(请注意,直到现在我还没有在 global.asax 中添加任何路由)

1.localhost/MyWebsite 会被转发到 localhost/MyWebsite/Index.aspx 好!!

2.localhost/MyWebsite/Aboutus 将被转发到 localhost/AboutUs/Index.aspx (此重定向完成,因为父级默认文档由 AboutUs 文件夹继承) 好的!

3.localhost/MyWebsite/ContactUs == Http Error 403.14 Forbidden(这个错误是由IIS7抛出的,因为它在Conactus文件夹中没有找到Index.aspx)很好!

好的,所以为了将 localhost/MyWebsite/ContactUs 路由到 localhost/MyWebsite/ContactUs/Index.aspx,我在 global.asax 的 RegisterRoutes() 方法中添加了以下代码,希望这能满足我的要求。

routes.MapPageRoute('ConactUs','ContactUs','~/ContactUs/ContactUs.aspx');

所以现在当我访问 localhost/MyWebsite/ContactUs 时,我仍然会收到相同的 Forbidden 错误。那么根目录下的 IIS7 默认页面设置是否不允许我的路由工作?

如果我在每个文件夹中都有 Index.aspx 页面,那么它可以 ieredirection 到 /Contactus/Index.aspx ...但是如果我在每个页面中都没有 Index.aspx(我的默认文档)怎么办?

谢谢和亲切的问候,米。

4

3 回答 3

1

它不工作的原因是因为 IIS 处理程序发现文件夹“ContactUs”存在并且正在响应请求而不是移交给 ASP.NET 处理程序。(例如,如果您的实际物理文件夹被称为 'ContactUs1' 而不是 'ContactUs' 并更新您的路线以指向 '~/contactus1/contactus.aspx' 你会看到你的路由工作)。

在您的情况下,最简单的解决方案可能是将“ContactUs.aspx”设置为“ContactUs”子文件夹的默认文档。您可以通过以下 XML 部分将 web.config 添加到 ContactUs 文件夹来执行此操作。

<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="ContactUs.aspx" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>
于 2011-03-28T22:47:59.247 回答
1

好的,这就是我为我做的事情。首先让我再次添加一些关于我的项目的更多细节..

目录结构:

1.我的网站>索引.aspx

2.我的网站>关于我们>Index.aspx

3.我的网站>ContactUs>ContactUs.aspx

我所有的页面都有一个名为 logo.ascx 的 UserControl。logo.ascx 没有附加的代码隐藏文件。它只有一个带有 resolve.clienturl() 方法的 html。而 logo.ascx 只有以下属性;<%@ 控制语言="C#" %>

所以为了让每件事都能正常工作,我做了几件事,

  1. 对于每个目录,我根据需要选择了不同的默认文档。因此,每当浏览目录时,我都会自动被路由到我选择的默认页面。
  2. 我在 global.asax 文件中添加了路由以进行非目录浏览。
  3. 我做了 RouteExistingFiles= true;
  4. 然后我确保无论添加什么路线,我都将所有指向该页面的直接链接替换为短 url。就像我在整个项目中用 localhost/MyWebsite/ContactUs 替换了 localhost/MyWebsite/ContactUs/ContactUs.aspx(例如在菜单、子菜单等中)。
  5. 但是这样做有一个奇怪的问题,我无法看到我的徽标图像。我确信我已经使用了 resolve.cienturl() 并且它在我所有的非路由页面中都运行良好。但仅对于其路线添加图像不可见的页面。为了使这个工作,我所要做的就是在我的 logo.ascx 中添加一个代码隐藏文件,然后它就可以工作了。

感谢 naraen 感谢 pauli 的支持和建议。

于 2011-04-09T13:25:48.303 回答
0

你看过RouteExistingFiles的属性了吗RouteCollection?这将允许您指定是否应将路由用于现有文件和文件夹。默认值为 false,这意味着如果路由与文件或文件夹之间已经存在冲突,则该路由将被忽略。

于 2011-03-29T03:35:35.483 回答