2016-03-18 5 views
3

Я в настоящее время использую global.asax для моей маршрутизации страницы на моем сайте.MapPageRoute routeUrl ударяет 403 по конкретному запросу

За исключением меня есть следующий код:

//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> 

Но я не думаю, что это это проблема. Потому что, если я не использую аутентификацию, я получаю ту же ошибку.

Кому-то, кто знает ответ?

ответ

2

Проблема связана с путём /links, который вы пытаетесь маршрутизировать, также является физической папкой в ​​корне приложения, и в этом случае IIS решит использовать статический обработчик файлов, прежде чем задействовать обработчик маршрутизации. В этом случае запрос /links на самом деле представляет собой список запросов контента в папку/links, которая обычно ограничена по умолчанию и будет запускать 403, который вы видите. И я бы предположил, что даже это не отрицается, это не будет поведение, которое вы ожидаете.

метода грубой силы, чтобы обойти эту проблему, чтобы добавить к вашему web.confg:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 

который заставит запустить весь модуль на всех путях, которые, как правило, могут вызвать некоторые побочные эффекты, и, конечно, приведет к некоторому влиянию производительности на сайт.

Более конкретный способ борьбы с такого рода проблемой является определение обработчика по определенному пути (ы), в вашем случае, вы можете попробовать добавить это в ваших web.config system.webServer -> обработчиками:

<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.

+0

Благодарим за ответ! Я изменил пути в моем проекте, так что это больше не физический путь. Теперь он работает! – Niels

Смежные вопросы