【问题标题】:ASP.NET Core - prevent static file of certain filetype from being servedASP.NET Core - 防止提供某些文件类型的静态文件
【发布时间】:2019-09-30 21:18:15
【问题描述】:

我正在尝试将 ASP.NET Core 配置为在某些情况下禁止提供 .map 文件。我试图将它从已知的文件类型中删除,但这似乎并不能阻止它实际提供文件。这就是我现在拥有的:

        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "Client";

            if (env.IsDevelopment())
            {
                var customPort = 60001;
                spa.UseProxyToSpaDevelopmentServer($"http://localhost:{customPort}");
                spa.UseReactDevelopmentServer("start");
            }
        });

        var contentTypeProvider = new FileExtensionContentTypeProvider();
        contentTypeProvider.Mappings.Remove(".map");
        app.UseSpaStaticFiles(new StaticFileOptions
        {
            ContentTypeProvider = contentTypeProvider
        });

使用此配置,当我浏览到 .map 文件时,我仍然能够加载它们。我能做些什么来防止这种情况发生?

【问题讨论】:

    标签: javascript asp.net-core webpack source-maps asp.net-core-2.2


    【解决方案1】:

    尝试使用UseStaticFiles,在app.UseSpa 调用之前,甚至在你调用app.UseMvc 之前(如果适用)。我认为.map 用于 css/scss 映射。这不是一个特别的 SPA 文件,因此它正在被提供。

    var contentTypeProvider = new FileExtensionContentTypeProvider();
    contentTypeProvider.Mappings.Remove(".map");
    
    app.UseStaticFiles(new StaticFileOptions
    {
        ContentTypeProvider = provider
    });
    
    app.UseMvc(); // if applicable
    
    app.UseSpa(spa =>
    {
        spa.Options.SourcePath = "Client";
    
        if (env.IsDevelopment())
        {
            var customPort = 60001;
            spa.UseProxyToSpaDevelopmentServer($"http://localhost:{customPort}");
            spa.UseReactDevelopmentServer("start");
        }
    });
    
    app.UseSpaStaticFiles();
    

    希望对你有帮助

    【讨论】:

    • 使用上述选项,.map 文件仍会被提供。它们用于将 .js 文件映射到其源文件。
    • 我明白了,所以它们是 js 源映射文件。在我更新我的答案之前,请问您是否也打算在生产中使用它们?
    • 我正在尝试创建一个系统,以防止它们在生产中加载 - 本质上是使用配置来启用或禁用提供这些文件。
    【解决方案2】:

    这里的问题是我使用的是通过 Node.js 代理的本地开发设置。在这种情况下,代理会处理静态文件而不是 ASP.NET Core。我不得不切换它并使用已发布的代码进行测试。

    【讨论】: