【问题标题】:Create a MVC route ending ".js" and returning JavaScript?创建一个以“.js”结尾并返回 JavaScript 的 MVC 路由?
【发布时间】:2014-11-17 00:47:56
【问题描述】:

我想使用 ASP.NET MVC 5 自动生成一些 JavaScript 文件,并在其 URL 中使用适当的 .js 扩展名。

这是我的问题;

我在整个网站中都使用require.js,它运行良好。然而,并不是我所有的 JavaScript 文件都是磁盘上的真实文件。其中一些必须在运行时生成。所以我写了一个控制器来生成动态 JavaScript 文件,并在使用默认路由时为它们提供服务;

// ~/Resource/CommonRes -- from ResourceController.CommonRes()
define([], function() {
    return {
        "menuItemConfiguration":"Configuration",
        "menuItemAdmin":"Admin",
        "manageAccount":"Manage Account",
        "logOff":"Log off" 
        ...
    };
});

但是,我需要将路由作为~/Scripts/Resources/CommonRes.js 提供——.js 扩展至关重要,因为我实际上返回了一个require.js 模块,以便像这样调用;

require(['Resources/CommonRes'], function(commonRes) {
    // code the uses the resource file
});

在这种情况下,名为Resources/CommonRes 的模块将始终在~/Scripts/Resources/CommonRes.js 中查找。因此需要使用该扩展来提供它。

我似乎无法正确路由。我尝试了以下方法,但无济于事;

routes.MapRoute(
    name: "Resource Scripts",
    url: "Scripts/Resource/{action}",
    defaults: new { controller = "Resource" },
    namespaces: new string[] { "AITrackRecord.Controllers" }
);

【问题讨论】:

    标签: javascript asp.net-mvc requirejs asp.net-mvc-routing url-routing


    【解决方案1】:

    根据Darin Dimitrov

    IIS 拦截该请求,因为它包含一个文件扩展名并劫持它认为它是一个静态文件,而不是将其传递给您的应用程序。

    将此添加到您的Web.config

    <system.webServer>
        <handlers>
            <add name="ScriptsHandler" path="Scripts/Resource/*.js" verb="GET"
                type="System.Web.Handlers.TransferRequestHandler" />
        </handlers>
    </system.webServer>
    

    那么,路线:

    routes.MapRoute(
        name: "DynamicJavascript",
        url: "Scripts/Resource/{action}.js",
        defaults: new { controller = "Resource" }
    );
    

    样品控制器:

    public class ResourceController : Controller
    {
        public ActionResult MyScript()
        {
            return Content("var greeting = \"Hello World!\";");
        }
    }
    

    结果:

    【讨论】:

    • 绝对准确!非常感谢 - 它开辟了很多可能性!
    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多