如何在ASP.NET vNext中允许MIME扩展映射?

Sea*_*een 5 permissions configuration mime-types asp.net-core

背景

我有一段需要在运行时使用Less.js编译的LESS代码 - 它通过JavaScript计算一些东西 - 所以我不能使用任务运行器等.

在我的index.html中,我有:

<head>
   ...
   <link rel="stylesheet/less" href="assets/less/DynamicHeight.less" />
   ...
   <script type="text/javascript" src="lib/less/less.js"></script>
   ... 
</head>
Run Code Online (Sandbox Code Playgroud)

问题

Less.js似乎无法找到该文件:

LESS.js barfing因为IIS无法提供文件

当我尝试直接访问该文件时,我看到:

在此输入图像描述

如何添加允许下载较少文件的配置?我仍然可以使用web.configvNext文件,或者我需要做一些事情config.json吗?

领导1:我应该使用Owin吗?

认为这可能是正确的道路,但我很陌生.

我看到了很多教程,比如K. Scott Allen的教程,参考代码如下:

    public void Configuration(IAppBuilder app)
    {
        var options = new StaticFileOptions
        {
            ContentTypeProvider = new FileExtensionContentTypeProvider()
        };
        ((FileExtensionContentTypeProvider)options.ContentTypeProvider).Mappings.Add(
            new KeyValuePair<string, string>(".less", "text/css"));
        app.UseStaticFiles(options);
    }
Run Code Online (Sandbox Code Playgroud)

然而,似乎在其当前版本中,asp.net正在寻找签名Configure(IApplicationBuilder app).

这个IApplicationBuilder类没有一个方法UseStaticFiles- 它只有一个签名IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware).

我有一种感觉,这可能是解决问题的正确途径 - 我只是无法找到如何配置IAppliationBuilder映射MIME扩展.

Sea*_*een 7

好的,我相信我明白了.

步骤1:为静态文件添加适当的库

在ASP.NET vNext中,这是Microsoft.Aspnet.StaticFiles.

在您的project.json文件中,添加以下内容"dependencies":

"Microsoft.AspNet.StaticFiles": "1.0.0-beta2"
Run Code Online (Sandbox Code Playgroud)

这会添加您稍后可以使用的静态中间件方法.

第2步:配置应用程序以使用静态文件

在顶部添加using语句:

using Microsoft.AspNet.StaticFiles;
Run Code Online (Sandbox Code Playgroud)

此时,该app.UseStaticFiles方法将可用,因此您的Configure方法可以如下所示:

public void Configure(IApplicationBuilder app)
{
    var options = new StaticFileOptions
    {
        ContentTypeProvider = new FileExtensionContentTypeProvider()
    };
    ((FileExtensionContentTypeProvider)options.ContentTypeProvider).Mappings.Add(
        new KeyValuePair<string, string>(".less", "text/css"));
    app.UseStaticFiles(options);
}
Run Code Online (Sandbox Code Playgroud)

瞧!我在浏览.less文件时得到文本,并且LessJS不再出现错误.


Ger*_*oli 5

在.NET Core 1.0.1中,SeanKileen的回答仍然不错。以下是简单的代码重写:

public void Configure(IApplicationBuilder app, ...)

    var contentTypeProvider = new FileExtensionContentTypeProvider();
    contentTypeProvider.Mappings[".map"] = "application/javascript";
    contentTypeProvider.Mappings[".less"] = "text/css";

    app.UseStaticFiles(new StaticFileOptions()
    {
        ContentTypeProvider = contentTypeProvider
    });
Run Code Online (Sandbox Code Playgroud)

上面的代码扩展了默认的映射列表(请参阅源代码),该列表已经具有约370个映射。

FileExtensionContentTypeProvider如果要使用这370个默认映射,请避免使用带有字典的构造函数重载(如JHo所建议)。