asp.net-mvc – 用于Javascript文件的MVC Route to Action

我正在尝试添加一个mvc路由来从控制器生成一个 javascript.我添加了以下路由,但它不起作用:
routes.MapRouteWithName(
           "DataSourceJS",// Route name
           "Scripts/Entities/{controller}/datasource.js",// URL with parameters
           new { controller = "Home",action = "DataSourceJS"} // Parameter defaults,null
           );

但是,如果我将路由更改为没有“.js”,并导航到“Scripts / Entities / {controller} / datasource”,它就可以工作.但是我需要在那里有.js文件扩展名,我该如何使用呢?

解决方法

how do I make this work?

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>

有些人也可能会告诉你使用:

<modules runAllManagedModulesForAllRequests="true" />

但我不建议您这样做,因为这意味着所有对静态资源的请求现在都将流经托管管道,这可能会对您的应用程序产生负面的性能开销.处理程序语法允许您仅针对某些路由模式和HTTP谓词选择性地启用此功能.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....