我正在尝试添加一个mvc路由来从控制器生成一个javascript.我添加了以下路由,但它不起作用:
routes.MapRouteWithName(
"DataSourceJS", // Route name
"Scripts/Entities/{controller}/datasource.js", // URL with parameters
new { controller = "Home", action = "DataSourceJS"} // Parameter defaults,
, null
);
Run Code Online (Sandbox Code Playgroud)
但是如果我改变路线没有".js"并且导航到"Scripts/Entities/{controller}/datasource"它就可以了.但我需要在那里有.js文件扩展名,我该如何使用呢?
我该如何工作?
IIS拦截请求,因为它包含文件扩展名并且劫持它认为它是静态文件而不将其传递给您的应用程序.
为了使它工作,你应该告诉IIS不要这样做.在该<system.webServer>部分中,您可以添加以下处理程序,以指示具有指定模式的请求应由托管管道处理:
<system.webServer>
<handlers>
...
<add name="ScriptsHandler" path="Scripts/Entities/*/datasource.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
有些人也可能会告诉你使用:
<modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)
但我不建议您这样做,因为这意味着所有对静态资源的请求现在都将流经托管管道,这可能会对您的应用程序产生负面的性能开销.处理程序语法允许您仅针对某些路由模式和HTTP谓词选择性地启用此功能.
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |