网址路由和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。
答案 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;
所以为了让每件事都有效,我做了几件事,
感谢naraen感谢pauli的支持和建议。
答案 2 :(得分:0)
您是否查看了RouteCollection
的{{3}}属性。这将允许您指定是否应将路由用于现有文件和文件夹。默认值为false,这意味着如果路由与文件或文件夹之间存在冲突,则路由将被忽略。