Configuration 如何在ASP.NET vNext中允许MIME扩展映射? 背景
我有一段更少的代码,需要在运行时用更少的.js编译——它通过JavaScript计算一些东西——所以我不能使用任务运行程序,等等 在我的index.html中,我有: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
<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" },
// ....
})
});