我正在try 让以下(和类似的)URL在我的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个方法等.我得到的错误是一个一般的404错误(下图).

在此处输入图像描述

我已经try 将<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />添加到我的web.config中,我也try 添加了

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

所有这些似乎都不管用.所以我的问题基本上是,我如何才能让这个URL正常工作,并正确映射呢?

推荐答案

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

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

这将使包含.dll的所有请求通过托管管道得到服务.还要注意我如何将它们仅限于GET动词,以限制对性能的影响.

Asp.net相关问答推荐

ASP.NET多行查询文本框中的多个名称并将结果添加到单个网格视图

目前不支持超过 65534 个段的跨区存档

如何从 Azure 上托管的应用服务获取登录用户名?

某些黑客能否从用户那里窃取 Web 浏览器 cookie 并在网站上使用该名称登录?

我可以在 .net 核心中使用 Entity Framework 6(非核心)吗?

判断会话是否为空

如何从网页 (asp.net) 启动 EXE

配置转换和TransformXml 任务失败错误消息

返回 IHttpActionResult vs IEnumerable vs IQueryable

带有邮箱地址参数的 WebApi 方法从 HttpClient 返回 404

Ef core:执行 MaxAsync 时序列不包含任何元素

如何设置默认页面 asp.net

DropDownList AppendDataBoundItems(第一项为空白且无重复项)

GMT 和 UTC 一样吗?

IIS Express - 增加内存限制

在 JavaScript 中获取当前会话值?

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

哪个控件导致了回发?

DropDownList 的 SelectedValue 与 SelectedItem.Value

POST 字符串到 ASP.NET Web Api 应用程序 - 返回 null