2

我正在尝试添加一个 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 文件扩展名,我该如何进行这项工作?

4

1 回答 1

6

我该怎么做?

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 动词启用此功能。

于 2013-02-07T06:49:49.790 回答