Alx*_*ndr 33 asp.net asp.net-mvc asp.net-mvc-routing asp.net-web-api
我试图在我的ASP.net MVC4/WebApi项目中使用以下(和类似的)URL:
http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll
Run Code Online (Sandbox Code Playgroud)
负责此网址的路线如下所示:
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 }
);
Run Code Online (Sandbox Code Playgroud)
如果我删除它,它的工作正常.在文件名中,或者如果我在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>
Run Code Online (Sandbox Code Playgroud)
而且似乎没有任何效果.所以我的问题基本上是,如何让这个URL工作,并正确映射?
Dar*_*rov 50
您可以将以下处理程序添加到<handlers>
您的部分<system.webServer>
:
<add
name="ManagedDllExtension"
path="api/nav/*/*.dll"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0"
/>
Run Code Online (Sandbox Code Playgroud)
这将使所有包含的请求.dll
通过托管管道提供.另请注意我是如何将它们仅限于GET动词以限制性能影响.
Alx*_*ndr 11
找到了.我需要的是什么(也许我在原帖中添加了一些内容):
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我的权衡是附加/end
到路线的末尾。.
最后一个之前的被忽略/
。
等效的 URL 为http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll/end。
好处是您的资产性能不会受到影响。
归档时间: |
|
查看次数: |
9742 次 |
最近记录: |