MapPageRoute routeUrl根据特定请求命中403

时间:2016-03-18 10:33:40

标签: c# asp.net url-routing maproute

我目前在我的网站上使用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>

但我不认为这是问题所在。因为如果我不使用身份验证,我会收到相同的错误。

有人知道答案吗?

1 个答案:

答案 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