Asp.net 无法将HttpHandler映射到";路径/*";通配符映射

Asp.net 无法将HttpHandler映射到";路径/*";通配符映射,asp.net,iis-7,httphandler,webdev.webserver,nancy,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> iis6也有一个匹配的部分,所以我可以在webdev.

所以我一直在尝试将http模块映射到MVC3站点的子路径。据我所知,它应该很简单,但它一直不起作用。模块的设置如下所示:

<handlers>
  <add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>

iis6也有一个匹配的部分,所以我可以在webdev.webserver下运行它。但是,在测试部署到本地iis7(在Win7下)和webdev.webserver时,实际上只有/api调用处理程序。如果我调用/api/{anywhere},它只返回404

我确信我只是“做错了(tm)”,但任何帮助都将不胜感激


注意:我还尝试了一些其他配置,包括使用标记和创建/api文件夹,以及使用完整通配符将web.config添加到该文件夹。

URLRoutingModule-4.0是nancy处理程序前面列出的一个全面处理程序。因此,它将在你的操控者被击中之前发挥作用。您可以删除处理程序并将其添加回,如下所示:

<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>
同样,这也是我通常为网站上的“/静态”内容所做的。我还没有发现如何绕过对seconds web.config的需求

编辑

当我不得不这么做的时候,我很难弄明白这一点,而且我的记忆力似乎不太好。我没有在任何地方指定
路径/*
处理程序,而是:

(仅指定简单通配符/完全限定路径以绕过UrlRouting)

我的
/Content/
处理程序列表现在如下所示:


这几乎是我可以确定的,
/Content/
中的任何内容都将通过StaticFileModule提供。这里的诀窍似乎是指定:
inheritinchildaplications=“false”

似乎UrlRoutingModule-4.0麻烦太多了。相反,我只是告诉MVC3忽略路由。这不是一个完美的解决方案,但在我找到更好的解决方案之前,我必须在
注册表项中坚持这一点:

routes.IgnoreRoute("api/{*route}");

简单。只需输入路径,没有通配符


这将匹配:

/api/{anything}


我尝试了很多组合,但在IIS6或IIS7下似乎不起作用。同样的结果。我在/api文件夹和主Web.config中的第二个Web.config下再次尝试了这一点,非常接近我所需要的。但正如它被命名为UrlRoutingModule-4.0一样,它是一个模块而不是一个处理程序。我已使用适合我的正确web.config编辑了您的答案。谢谢你的帮助!事实上,即使有这些变化,这也不太管用。我摆弄它,只有完全禁用MVC路由才能让它工作,这并不理想。如果您说您已经将其用于静态文件路由,请再次检查您在web.configs中所做的工作。好的,既然它对您有效,我将暂时将其标记为答案。我现在对下面的解决方案没意见,再处理这个问题简直是疯了。非常感谢你的帮助,好家伙。我已经试了几个小时了。在子目录上使用不同的web.config的想法是完美的。谢谢在功能上似乎与IIS6的adsutil.vbs集/W3SVC/105364569/root/Content/ScriptMaps“”相当,似乎运行良好。你发现这样做有什么缺点吗?到目前为止还没有,已经在生产中使用了很长一段时间。你可能还想添加routes.IgnoreRoute(“\u Nancy/{*route}”);如果您正在使用nancy v0.10+启用diagnostics。有趣的是,我不再做太多的.NET工作,因此我可能没有时间验证这一点。如果有其他人可以的话,我很乐意把它标记为正确答案。我得说实话,这看起来几乎。。。太容易了。我必须相信我会尝试的。@ChrisNicola我在我所有的httpHandlersforAPI中都使用了这个。很好地工作。在我看来,这是最好的答案。由于某些原因,静态文件处理程序无法工作。此处理程序需要接受答案中所示的方法。这对我来说确实有效-从一个处理程序(我动态调整大小/流)提供JPG,从第二个处理程序提供js/png/etc。
<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>
<?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>
routes.IgnoreRoute("api/{*route}");