我目前在我的网站上使用global.asax进行页面路由。
除了我有以下代码:
//Home:
routes.MapPageRoute("intro", String.Empty, "~/Default.aspx");
routes.MapPageRoute("home", "home", "~/Default.aspx");
//EHBO:
routes.MapPageRoute("ehbo-overzicht", "ehbo/overzicht", "~/ehbo/overview.aspx");
routes.MapPageRoute("ehbo-input", "ehbo/input", "~/ehbo/input.aspx");
routes.MapPageRoute("ehbo-input-edit", "ehbo/inputedit/{itemid}", "~/ehbo/inputedit.aspx");
//Links:
routes.MapPageRoute("links", "links/links", "~/links/overview.aspx");
但是对于我想要使用的链接:
//Links:
routes.MapPageRoute("links", "links", "~/links/overview.aspx");
但这不适合我。我收到以下错误: HTTP-fout 403.14 - 禁止
我在我的地图ehbo上使用身份验证,但没有别的,web.config:
<!-- Authentication -->
<authentication mode="Forms">
<forms loginUrl="~/Login" name=".ASPXFORMSAUTH" defaultUrl="home">
</forms>
</authentication>
<authorization>
<allow users="*"/>
<deny users="?" />
</authorization>
<location path="ehbo">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
但我不认为这是问题所在。因为如果我不使用身份验证,我会收到相同的错误。
有人知道答案吗?
答案 0 :(得分:2)
问题是由您尝试路由的路径/links
也是应用程序根目录中的物理文件夹引起的,在这种情况下,IIS会选择使用上面的静态文件处理程序来获取路由处理程序。在这种情况下,对/links
的请求实际上是对您的/ links文件夹的内容请求列表,默认情况下通常会受到限制,并会触发您看到的403。我会假设即使它没有被否定,也不会是你期望的行为。
解决此问题的一种强力方法是将其添加到您的web.confg:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
哪个会强制在所有路径上运行所有模块,这通常会导致一些副作用,并且肯定会在网站范围内带来一定程度的性能影响。
处理此类问题的一种更具体的方法是在特定路径上指定处理程序,在您的情况下,您可以尝试在web.config system.webServer - &gt;中添加此处理程序。处理程序:
<handlers>
<!--all other removes-->
<add name="NameItProperly"
path="/links"
verb="GET,POST"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
<!--all other adds-->
</handlers>
只会强制路由处理程序跳转到此特定路径/links
。