我有一段需要在运行时使用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>
Less.js似乎无法找到该文件:
当我尝试直接访问该文件时,我看到:
如何添加允许下载较少文件的配置?我仍然能够将web.config
个文件与vNext一起使用,还是需要对config.json
执行某些操作?
认为这可能是正确的道路,但我很陌生。
我看到了很多教程,例如K. Scott Allen's,其中引用的代码如下:
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);
}
但是,似乎在当前版本中,asp.net正在寻找Configure(IApplicationBuilder app)
的签名。
IApplicationBuilder
类没有UseStaticFiles
的方法 - 它只有IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
的签名。
我觉得这可能是解决问题的正确途径 - 我无法找到如何对IAppliationBuilder
进行属性配置以映射MIME扩展。
答案 0 :(得分:7)
好的,我相信我弄清楚了。
在ASP.NET vNext中,这是Microsoft.Aspnet.StaticFiles
。
在project.json
文件中,在"dependencies"
下添加以下内容:
"Microsoft.AspNet.StaticFiles": "1.0.0-beta2"
这会添加您稍后可以使用的静态中间件方法。
在顶部添加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);
}
瞧!我在浏览.less文件时得到文本,并且LessJS不再出现错误。
答案 1 :(得分:3)
在.NET Core 1.0.1中,SeanKileen的答案仍然很好。以下是一个简单的代码重写:
let imageOptionsDictKeys = [kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey, kCVPixelBufferHeightKey, kCVPixelBufferOpenGLESCompatibilityKey]
let imageOptionsDictKeysRawPointer = Unmanaged.passUnretained(imageOptionsDictKeys).toOpaque()
let imageOptionsDictKeysPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeysRawPointer)
let imageOptionsDictValues = [ cvPixelFormatType, frameW, frameH, boolYES]
let imageOptionsDictValuesRawPointer = Unmanaged.passUnretained(imageOptionsDictValues).toOpaque()
let imageOptionsDictValuesPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictValuesPointer.initialize(to: imageOptionsDictValuesRawPointer)
let imageOptions = CFDictionaryCreate(kCFAllocatorDefault, imageOptionsDictKeysPointer, imageOptionsDictValuesPointer, 4, &keyCallbacks, &valueCallbacks)
上面的代码EXTENDS默认映射列表(see the source),它已经有~370个映射。
如果你想要那些370默认映射,请避免使用带有字典的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
});
构造函数重载(如JHo所建议的那样)。
答案 2 :(得分:-1)
SeanKilleen的答案是正确的,仍然适用于ASP.NET Core RC1。我唯一的改进是使用集合初始化程序编写完全相同的代码,以使其更清晰。
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
{
{ ".less", "text/css" },
{ ".babylon", "text/json" },
// ....
})
});