36

我正在尝试让以下(和类似的)网址在我的 ASP.net MVC4/WebApi 项目中工作:

http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll

负责此 url 的路由如下所示:

        config.Routes.MapHttpRoute(
            name: "Nav",
            routeTemplate: "api/nav/{project}/{assembly}/{namespace}/{type}/{member}",
            defaults: new { controller = "Nav", assembly = RouteParameter.Optional, @namespace = RouteParameter.Optional, type = RouteParameter.Optional, member = RouteParameter.Optional }
        );

如果我删除 . 在文件名中,或者如果我在 URL 后面添加一个斜杠,但这也意味着我不能使用Url.Route-methods 等。我得到的错误是一个通用的 404 错误(下图)。

在此处输入图像描述

我尝试添加<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />到我的 web.config,并且我也尝试添加

<compilation debug="true" targetFramework="4.5">
  <buildProviders>
    <remove extension=".dll"/>
    <remove extension=".exe"/>
  </buildProviders>
</compilation>

而且似乎都不起作用。所以我的问题基本上是,我怎样才能让这个 URL 正常工作并正确映射?

4

3 回答 3

52

您可以将以下处理程序添加到<handlers>您的部分<system.webServer>

<add 
    name="ManagedDllExtension" 
    path="api/nav/*/*.dll" 
    verb="GET" 
    type="System.Web.Handlers.TransferRequestHandler" 
    preCondition="integratedMode,runtimeVersionv4.0" 
/>

这将使包含的所有请求都.dll通过托管管道提供服务。另请注意,我如何将它们限制为 GET 动词以限制性能影响。

于 2013-02-02T17:52:27.947 回答
13

找到了。需要的是这个(也许是我在原帖上面添加的一些东西):

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
于 2013-02-02T17:47:23.107 回答
4

我的权衡是附加/end到路线的尽头。.的在最后一个之前被忽略/

等效的 URL 是http://127.0.0.1:81/api/nav/SpitiFire/SpitiFire.dll/end

好处是您的资产不会受到性能影响。

于 2016-09-27T11:27:30.527 回答