URLRoutingModule-4.0
- это обработчик всех вызовов, перечисленных перед вашим обработчиком Нэнси.Таким образом, он вступит в игру еще до того, как ваш обработчик попадет в цель.Вы можете удалить обработчики, добавить свои и добавить их обратно следующим образом:
<handlers>
<remove name="BlockViewHandler" />
<remove name="UrlRoutingModule-4.0" />
<add verb="*" path="robots.txt" name="robots" type="System.Web.StaticFileHandler"/>
... custom handlers here
<add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
... now add back UrlRoutingModule and BlockViewHandler
<add path="*" verb="*" name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="managedHandler" />
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Вы можете увидеть порядок обработчиков в IIS7 в разделе Handler Mappings
select View Ordered List
, и в нем будет указан порядок загрузки.обработчики сверху (первый) к низу (последний).
Вам может понадобиться секунда Web.config
в вашей папке /api
<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<clear />
<add name="Nancy" path="*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</httpHandlers>
</system.web>
</configuration>
Точно так же, это то, что я обычно делаю для«/ статический» контент на сайтах.Я не нашел, как обойти потребность в секундах web.config.
РЕДАКТИРОВАТЬ
Мне было трудно понять это, когда я должен был такжеи, кажется, моя память не послужила мне хорошо.Я нигде не указываю обработчик path/*
, вместо этого у меня есть это:
(указываются только простые символы подстановки / полные пути для обхода UrlRouting)
<location path="." inheritInChildApplications="false">
<system.webServer>
<!--
ml: in .NET 4.0 its now safe to remove from the modules section.
Make sure you have a *. mapping to a ExtensionLessUrl hanlder in IIS
this should improve performance a tad albeit neglectable.
see: http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static-requests.aspx
-->
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="false" />
<handlers>
<remove name="BlockViewHandler" />
<remove name="UrlRoutingModule-4.0" />
<add verb="*" path="robots.txt" name="robots" type="System.Web.StaticFileHandler"/>
.. Some company handlers i can't list
<add path="*" verb="*" name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="managedHandler" />
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</location>
Затем в моем файле /Content/web.config
Я установил следующее:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<clear />
<add name="StaticFiles" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="None" />
</handlers>
<staticContent>
<clientCache cacheControlMaxAge ="31.00:00:00" cacheControlMode="UseMaxAge" />
</staticContent>
</system.webServer>
</configuration>
Мой список обработчиков для /Content/
теперь выглядит следующим образом:
Это примерно настолько, насколько я могувсе, что в /Content/
будет обслуживаться через StaticFileModule.Уловка здесь, кажется, указывает: inheritInChildApplications="false"
.