Chr*_*ola 25 asp.net iis-7 httphandler webdev.webserver nancy
所以我一直在尝试将http模块映射到MVC3站点的子路径.它应该很简单,因为我理解它,但它没有工作.模块设置如下:
<handlers>
<add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
iis6也有匹配部分,所以我可以在webdev.webserver下运行它.然而,测试部署到我的本地iis7(在Win7下)和webdev.webserver,只有/ api实际上调用处理程序.如果我调用/ api/{anything}它只返回404.
我确定我只是"做错了(tm)",但任何帮助都会受到赞赏.
注意:我还尝试了其他一些配置,包括使用标记和创建/ api文件夹,并使用完整的通配符将web.config添加到该文件夹.
Thi*_*iff 18
简单.只是把路径,没有通配符.
<handlers>
<add name="Nancy" path="api" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
这将匹配:
/ API/{}东西
Mar*_*man 14
这URLRoutingModule-4.0
是在你的nancy处理程序之前列出的catch all handler.因此它会在您的处理程序被击中之前发挥作用.您可以删除处理程序添加您的处理程序并将其添加回来:
<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>
Run Code Online (Sandbox Code Playgroud)
您可以在Handler Mappings
选择下的IIS7中查看处理程序顺序,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>
Run Code Online (Sandbox Code Playgroud)
同样,这也是我通常对网站上的"/ static"内容所做的.我还没有找到如何规避秒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>
Run Code Online (Sandbox Code Playgroud)
然后在我的/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>
Run Code Online (Sandbox Code Playgroud)
我的处理程序列表/Content/
现在看起来像这样:
/Content/
通过StaticFileModule可以提供哪些内容.这里的诀窍似乎在于:inheritInChildApplications="false"
.
似乎UrlRoutingModule-4.0比它的价值更麻烦.相反,我刚刚告诉MVC3忽略这些路线.不是一个完美的解决方案,但在我有更好的工作之前,我必须坚持下去RegisterRoutes
:
routes.IgnoreRoute("api/{*route}");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27899 次 |
最近记录: |