ASP.net MVC4 WebApi路由,其中​​包含文件名

时间:2013-02-02 17:29:35

标签: asp.net asp.net-mvc asp.net-web-api asp.net-mvc-routing

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

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

负责此网址的路线如下所示:

        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 - 方法等。我得到的错误是一般的404错误(下图)。

enter image description here

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

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

似乎没有任何效果。所以我的问题基本上是,如何让这个URL工作,并正确映射?

3 个答案:

答案 0 :(得分:49)

您可以将以下处理程序添加到<handlers>的{​​{1}}部分:

<system.webServer>

这将使包含<add name="ManagedDllExtension" path="api/nav/*/*.dll" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 的所有请求通过托管管道提供。另请注意我是如何将它们仅限于GET动词以限制性能影响。

答案 1 :(得分:11)

找到它。我需要的是什么(也许我在上面的帖子中添加了一些内容):

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

答案 2 :(得分:1)

我的权衡是将/end追加到路线的尽头。在.之前,我会忽略/

等效的网址为 http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll/end

好处是您的资产不会受到性能损失。

相关问题