IIS7的URL路由问题

时间:2011-03-28 04:14:56

标签: c# asp.net-routing

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

您好,

我在asp.net 4.0和IIS7中有关于URL路由的查询。下面我解释了我的网站结构以及它在IIS7中的配置方式。

目录结构:

1.MyWebsite> Index.aspx

2.MyWebsite> AboutUs> Index.aspx

3.MyWebsite> ContactUs> ContactUs.aspx

II7配置:

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

1.localhost / MyWebsite将被转发到localhost / MyWebsite / Index.aspx Ok !!

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

3.localhost / MyWebsite / ContactUs == Http Error 403.14 Forbidden(这个错误是由IIS7引起的becoz它在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错误。那么root的IIS7默认页面设置是不允许我的路由工作的吗?

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

谢谢&亲切的问候, m。

3 个答案:

答案 0 :(得分:1)

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

您的案例中最简单的解决方案可能是将“ContactUs.aspx”设置为仅用于“ContactUs”子文件夹的默认文档。您可以通过将web.config添加到ContactUs文件夹,并使用以下XML部分来完成此操作。

<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="ContactUs.aspx" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>

答案 1 :(得分:1)

好的,这就是我为我工作的所作所为。首先让我再添加一些关于我的项目的细节..

目录结构:

1.MyWebsite&GT; Index.aspx的

2.MyWebsite&GT;关于我们&GT; Index.aspx的

3.MyWebsite&gt; ContactUs&gt; ContactUs.aspx

我的所有网页都有一个名为logo.ascx的UserControl。 logo.ascx没有附加到它的代码隐藏文件。它只有一个带有resolve.clienturl()方法的html。而logo.ascx只有以下属性; &lt;%@ Control Language =“C#”%&gt;

所以为了让每件事都有效,我做了几件事,

  1. 对于每个目录,我根据需要选择了不同的默认文档。因此,无论何时浏览目录,我都会自动路由到我选择的默认页面。
  2. 我在global.asax文件中添加了用于非目录浏览的路由。
  3. 我做了RouteExistingFiles = true;
  4. 然后我确定无论我添加什么路线,我都将该页面的所有直接链接替换为短网址。喜欢 我用localhost / MyWebsite / ContactUs替换了localhost / MyWebsite / ContactUs / ContactUs.aspx 整个项目(如菜单,子菜单等)。
  5. 但这样做有一个奇怪的问题,我无法看到我的徽标图像。 我确信我使用过resolve.cienturl()并且它在我的所有非路由页面中都运行良好。但仅限于其路线添加图像的页面不可见。 为了实现这一点,我所要做的只是在我的logo.ascx 之后添加一个代码隐藏文件,并且它可以起作用。
  6. 感谢naraen感谢pauli的支持和建议。

答案 2 :(得分:0)

您是否查看了RouteCollection的{​​{3}}属性。这将允许您指定是否应将路由用于现有文件和文件夹。默认值为false,这意味着如果路由与文件或文件夹之间存在冲突,则路由将被忽略。