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

Configuration 如何在ASP.NET vNext中允许MIME扩展映射? 背景,configuration,permissions,mime-types,asp.net-core,Configuration,Permissions,Mime Types,Asp.net Core,我有一段更少的代码,需要在运行时用更少的.js编译——它通过JavaScript计算一些东西——所以我不能使用任务运行程序,等等 在我的index.html中,我有: <head> ... <link rel="stylesheet/less" href="assets/less/DynamicHeight.less" /> ... <script type="text/javascript" src="lib/less/less.js"&g

我有一段更少的代码,需要在运行时用更少的.js编译——它通过JavaScript计算一些东西——所以我不能使用任务运行程序,等等

在我的index.html中,我有:

<head>
   ...
   <link rel="stylesheet/less" href="assets/less/DynamicHeight.less" />
   ...
   <script type="text/javascript" src="lib/less/less.js"></script>
   ... 
</head>
但是,在当前版本中,asp.net似乎正在寻找
Configure(IAApplicationBuilder应用程序)
的签名

iaapplicationbuilder
类没有类似于
UseStaticFiles
的方法——它只有
iaapplicationbuilder Use(Func中间件)
的签名


我觉得这可能是解决问题的正确途径——我就是不知道如何正确配置
iaapplicationbuilder
来映射MIME扩展。

好的,我想我已经找到了答案

步骤1:为静态文件添加适当的库 在ASP.NET vNext中,这是
Microsoft.Aspnet.StaticFiles

在您的
project.json
文件中,在
的“依赖项”
下添加以下内容:

这添加了静态中间件方法,您可以稍后使用

步骤2:将应用程序配置为使用静态文件 在顶部添加using语句:

using Microsoft.AspNet.StaticFiles;
此时,
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);
}
public void配置(IApplicationBuilder应用程序)
{
var options=新的StaticFileOptions
{
ContentTypeProvider=新文件扩展ContentTypeProvider()
};
((FileExtensionContentTypeProvider)选项.ContentTypeProvider).Mappings.Add(
新的键值对(“.less”,“text/css”);
app.UseStaticFiles(选项);
}

瞧!我在浏览.less文件时会收到文本,LessJS不会再出现错误。

SeanKilleen的答案是正确的,并且仍然可以使用ASP.NET Core RC1。我唯一的改进是使用集合初始值设定项编写完全相同的代码,以使其更干净

app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
    {
        { ".less", "text/css" },
        { ".babylon", "text/json" },
        // ....
    })
});
app.UseStaticFiles(新的StaticFileOptions
{
ContentTypeProvider=新文件扩展ContentTypeProvider(新字典
{
{.less”,“text/css”},
{.babylon”,“text/json”},
// ....
})
});

在.NETCore1.0.1中,SeanKileen的答案仍然不错。以下是一个简单的代码重写:

public void配置(IApplicationBuilder应用程序,…)
var contentTypeProvider=新文件扩展contentTypeProvider();
contentTypeProvider.Mappings[“.map”]=“应用程序/javascript”;
contentTypeProvider.Mappings[“.less”]=“text/css”;
app.UseStaticFiles(新的StaticFileOptions()
{
ContentTypeProvider=ContentTypeProvider
});
上面的代码扩展了默认映射列表,该列表已经有~370个映射


如果您想要370个默认映射,请避免使用
FileExtensionContentTypeProvider
构造函数重载,该重载需要一个字典(正如JHo所建议的那样)。

对于让SVG在azure网站上运行非常有效;检查
ContainsKey
并替换值(如果找到),否则
Add
(无论多么不必要)@bdimag很高兴它有帮助!请注意,vNext仍在更改,因此如果将来更改,这种方法可能并不总是有意义的。此代码实际上不会生成相同的结果。您正在使用另一个类构造函数,这意味着您的映射列表将为空,加上显式映射。SeanKilleen answer使用具有数百个默认映射的默认构造函数。结果非常不同。见出处
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);
}
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
    {
        { ".less", "text/css" },
        { ".babylon", "text/json" },
        // ....
    })
});